Compare commits

..

197 Commits

Author SHA1 Message Date
Hristo Terezov
640ae8eefd fix(iAmRecorder): middleware bug 2022-01-28 12:15:04 -06:00
Hristo Terezov
6b2364f575 fix(screen-capture): disable. 2022-01-20 18:54:16 -06:00
Shawn Chin
8c7243fda0 fix: Add min width to volume slider (#10808) 2022-01-19 16:23:35 -06:00
tudordan7
443e060109 fix(virtual-background): Prevent buttons repositioning on click action. 2022-01-19 16:23:16 -06:00
Horatiu Muresan
394b0f412a chore(translates) Merge main-es.json into main-esUS.json 2022-01-19 18:06:35 +02:00
nbeck.indy
d79322979e fix(breakout-rooms) joining room with hand raised bug
Joining a room while hand is raised caused the local raised hand total to be wrong.
This is because when the local participant id changes, the old id is not cleared from the raisedHandQueue.
2022-01-19 18:06:35 +02:00
Saúl Ibarra Corretgé
7aac634a7d chore(rn,versions) bump app and sdk versions 2022-01-13 15:58:54 +01:00
Saúl Ibarra Corretgé
9c5b5e5b75 feat(rn,overflow-menu) remove duplicated buttons from overflow menu
The audio route selector is how in the header.

The mute options are in the participants pane, with the rest of the
moderation controls.
2022-01-13 15:47:32 +01:00
hmuresan
8236764501 fix(raised-hand) Preserve raised hand order for active speaker
- fixes: https://github.com/jitsi/jitsi-meet/issues/10609
2022-01-13 13:58:57 +01:00
Robert Pintilii
eb010061e0 feat(title-bar) Updated title bar (#10752)
Only display Picture-in-Picture button when feature is available
Moved conference timer before title
Created new always-on container for labels
Moved recording labels to always-on
Updated expanded label to support new always-on labels
Added raised hands counter label
Added speaker - earpiece toggle button
Lifted state up
2022-01-13 14:15:53 +02:00
Calin Chitu
1c360ce5b7 feat(participants-pane) added style comments 2022-01-13 12:09:14 +02:00
Calin Chitu
73f3409f0d feat(participants-pane) separated participants into collapsible lists 2022-01-13 12:09:14 +02:00
Christoph Settgast
b1a2ac66b0 fix(lang) update German translation 2022-01-12 22:50:46 +01:00
Avram Tudor
b3e1c5446c Revert "fix(Polls): Calculate vote percentage based on total number of votes" (#10781)
This reverts commit 69cbb7e103.
2022-01-12 18:28:24 +02:00
Saúl Ibarra Corretgé
30f2fe3577 fix(filmstrip) don't display filmstrip toggle in Jibri 2022-01-12 16:32:44 +01:00
Robert Pintilii
0b836acad9 fix(thumbnail) Fixed screensharing indicator tooltip (#10780) 2022-01-12 15:32:30 +02:00
Robert Pintilii
38dfb47bf1 fix(config) Update comment for disableTileEnlargement (#10779) 2022-01-12 14:22:34 +02:00
Robert Pintilii
44c2a6ce93 fix(thumbnail) Fix screenshare indicator (#10774) 2022-01-12 11:31:31 +02:00
Saúl Ibarra Corretgé
b65eb7d01a fix(build) exit with error if any CSS step fails
Before:

~~~
$ make deploy-css
./node_modules/.bin/sass css/main.scss css/all.bundle.css && \
        ./node_modules/.bin/cleancss --skip-rebase css/all.bundle.css > css/all.css ; \
        rm css/all.bundle.css
Error: Can't find stylesheet to import.
   ╷
78 │ @import 'filmstrip/vertical_filmstrip_overrides2';
   │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   ╵
  css/main.scss 78:9  root stylesheet
$
(exitcode is 0)
~~~

After:

~~~
$ make deploy-css
./node_modules/.bin/sass css/main.scss css/all.bundle.css && \
        ./node_modules/.bin/cleancss --skip-rebase css/all.bundle.css > css/all.css && \
        rm css/all.bundle.css
Error: Can't find stylesheet to import.
   ╷
78 │ @import 'filmstrip/vertical_filmstrip_overrides2';
   │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   ╵
  css/main.scss 78:9  root stylesheet
make: *** [deploy-css] Error 65
$
(exitcode is != 0)
~~~
2022-01-12 10:31:04 +01:00
Jaya Allamsetty
2f0d0527b6 chore(deps) lib-jitsi-meet@latest
* fix(logging) Log all the ssrcs present in the source signaling. Since the order of the ssrcs in the json-encoded message is not guaranteed to be in the correct SIM/FID order, log all the ssrcs.
* fix: ensure mucNickname
* ref(JingleSession) Recycle m-lines by rejecting them on source removal.

adf2f15d00...502aaf15b3
2022-01-11 13:57:09 -05:00
Дамян Минков
52840c55fa feat: Updates reload reason.
When there is no reload reason defined, try to extract something from the errors that caused it.
2022-01-11 11:22:53 -06:00
Akshay Raje
8d8cc9c8bd fix(toolbox) hide volume meter when audio levels are disabled 2022-01-11 17:08:36 +01:00
tmoldovan8x8
26a6c336e3 fix(rn) await for the promise in the _init object 2022-01-11 17:03:42 +02:00
micahmills
1d3d6a32a6 Persian translations (#10765)
* Persian Translations

* fixed typo in English text

* removes extra spaces in main translation file

* Farsi Translation update

* Finished Farsi translations
2022-01-11 08:39:39 -06:00
Saúl Ibarra Corretgé
31b5f7bbda fix(android) restore executable flag on gradlew 2022-01-11 07:50:31 -06:00
tmoldovan8x8
f8ca80bf8e fix(android) disables windows preview
Avoid white flash when starting the app.

Fixes: https://github.com/jitsi/jitsi-meet/issues/8237
2022-01-11 14:47:20 +01:00
tmoldovan8x8
b04677f3ea chore(deps, rn) update react-native-webview 2022-01-11 15:16:50 +02:00
abora8x8
74d7e4fde7 fix(jaas) log settings error 2022-01-11 11:26:05 +01:00
Saúl Ibarra Corretgé
61ae909ed5 chore(deps,rn) update navigation librarries to their latest versions
React Navigation v6.
2022-01-10 19:21:51 +01:00
Saúl Ibarra Corretgé
55e6cc027b fix(rn,welcome) use native driver for opacity animation 2022-01-10 19:21:51 +01:00
Saúl Ibarra Corretgé
ab3d2160c9 fix(lint) tame Flow 2022-01-10 19:21:51 +01:00
Saúl Ibarra Corretgé
90321ca016 feat(rn) update React Native to version 0.63
I'm updating to RN 0.63 instead of the latest (0.66 at the time of this writing)
so we can update the navigation related libraries to their latest versions, and
then proceed with the larger leap towards the latest RN.
2022-01-10 19:21:51 +01:00
Jaya Allamsetty
fe2f97b15d chore(deps) lib-jitsi-meet@latest
* fix(TPC): Implode the simulcast group only after toUnifiedPlan conversion. This fixes a regression introduced by the previous commit.

53b9601689...adf2f15d00
2022-01-10 12:04:58 -05:00
Shawn Chin
97fbfd21af fix: still show menu to toggle self view if disableLocalVideoFlip (#10751)
* fix: still show menu to toggle self view if disableLocalVideoFlip

* fixed lint issues
2022-01-10 08:34:01 -06:00
Robert Pintilii
b8778c4e0b fix(disableSelfView) Config overwrites settings (#10750) 2022-01-10 12:46:33 +02:00
Avram Tudor
22ffcf922a fix(thresholds) adjust thresholds for smaller width integrations (#10749)
allows chat button to be displayed when there should be enough space for it
2022-01-10 12:45:46 +02:00
Jaya Allamsetty
7c8692902c chore(deps) lib-jitsi-meet@latest
* ref(TPC) Cleanup and fix formating.
* ref(TPC) Remove an unnecessary toUnified sdp conversion. sLD is called immediately after createOffer/createAnswer, therefore the desc provided by createOffer/createAnswer can be directly passed to sLD without the need for converting it to unified plan format. This also fixes a warning seen on the browser console that says 'The description does not look like plan-b'.
* fix(tpc) extend ulpfec workaround to all versions
* fix: check if chrome version > 95 instead
* Fix issue number for rtx ulpfec workaround
* fix(tpc) disable ulpfec on chrome 97

55a03ac1b5...53b9601689
2022-01-07 17:43:09 -05:00
Дамян Минков
d91e7c3d31 fix: Fixes start A/V muted received by focus in case of slow gUM.
In case of slow resolving gUM, we can join the call (quickly joining from pre-join screen) and the gUM will be resolved after we receive the start A/V muted from jicofo and will produce a source-add, joining unmuted ignoring jicofo.
2022-01-07 14:53:45 -05:00
Дамян Минков
c5821d7a5f fix: Fixes startWithAudioMuted on quickly moving away from pre-join screen.
When gUM is slow, and we quickly join the conference, then startWithAudioMuted was not respected.
2022-01-07 14:53:45 -05:00
Calin Chitu
4878a00014 feat(participants-pane) updated styles for add breakout and invite buttons 2022-01-07 17:42:38 +02:00
Calin Chitu
db37cd37c8 feat(conference) centered header navigation button 2022-01-07 17:42:38 +02:00
Calin Chitu
cce27baaf4 feat(filmstrip) fixed context menus for thumbnail 2022-01-07 17:42:38 +02:00
tmoldovan8x8
307e253276 fix(rn, web) await initialisation before dispatching appWillMount 2022-01-07 15:18:24 +02:00
Calin Chitu
8de024a699 feat(participants-pane) hide admit all if knocking part < 2 2022-01-07 14:32:46 +02:00
Calin Chitu
f4c91374bf update react-native-paper to 4.11.1 2022-01-07 14:09:46 +02:00
Saúl Ibarra Corretgé
90f836040f fix(rn,audio) fix playback after API change
Upstream now skips the callback, so we need to provide one.
2022-01-07 09:29:32 +01:00
Jaya Allamsetty
29eb9452c0 fix(toolbox) Disable screensharing button on mobile for video sender limit.
Also, ignore the toggle screenshare shortcut when the video sender limit is reached.
2022-01-06 12:23:39 -05:00
Saúl Ibarra Corretgé
b8469545f3 fix(rn,android) adjust changed package names 2022-01-06 14:39:34 +01:00
Saúl Ibarra Corretgé
ba50ecec78 chore(deps) react-native-youtube-iframe @ 2.2.1 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
c88ac2f3bd chore(deps) react-native-webview @ 11.15.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
b6501412c4 chore(deps) react-native-watch-connectivity @ 1.0.4 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
188aff5aff chore(deps) react-native-video @ 5.2.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
2d683e4d41 chore(deps) react-native-url-polyfill @ 1.3.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
1c4a500c1c chore(deps) react-native-svg-transformer @ 1.0.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
29eb3c5347 chore(deps) react-native-splash-screen @ 3.3.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
656e0ba1e9 chore(deps) react-native-sound @ 0.11.1 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
50eb6563e3 chore(deps) react-native-performance @ 2.1.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
d290c1d11a chore(deps) react-native-get-random-values @ 1.7.2 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
5cbb526c04 chore(deps) react-native-device-info @ 8.4.8 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
06384b452b chore(deps) react-native-default-preference @ latest 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
36956810b1 chore(deps) react-native-collapsible @ 1.6.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
d161816972 chore(deps) react-native-callstats @ 3.73.7 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
50d33d068b chore(deps) react-native-calendar-events @ 2.2.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
e8939ba949 chore(deps) react-native-background-timer @ 2.4.1 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
bfc556f4df chore(deps) @react-native-community/slider @ 4.1.12 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
bac4afcdb4 chore(deps) @react-native-community/netinfo @ 7.1.7 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
8fd353f5f1 chore(deps) @react-native-google-signin/google-signin @ 7.0.4 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
f0b475e2bc chore(deps) @amplitude/react-native @ 2.7.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
1d77c52f91 chore(deps) @react-native-async-storage/async-storage @ 1.15.14 2022-01-06 13:10:32 +01:00
José Luís Andrade
44e07cd7e2 fix(lang) update Portuguese translation 2022-01-06 12:59:32 +01:00
Roshan Pulapura
09441c2632 feat(virtual-backgrounds) use new Open Source model
https://google.github.io/mediapipe/solutions/models.html#selfie-segmentation
2022-01-06 10:16:55 +01:00
Joan Montané
e3d38b197f fix(lang) update Catalan translation 2022-01-06 09:57:57 +01:00
Saúl Ibarra Corretgé
50d37bf8a7 fix(polls) use medium timeout for poll notifications 2022-01-06 09:47:58 +01:00
tmoldovan8x8
7dd9785e48 fix(rn, recording) adds _toggleScreenshotCapture function to AbstractStopRecordingDialog 2022-01-05 16:52:20 +02:00
Hamza KHAIT
315c884f0d fix(lang) update French translation 2022-01-05 11:33:36 +01:00
José Luís Andrade
8590315244 fix(lang) update Portuguese Translation 2022-01-05 11:20:39 +01:00
Horatiu Muresan
6b260c27a5 fix(aot) Let jitsi-meet-electron-sdk do the close (#10679) 2022-01-04 13:21:30 +02:00
Horatiu Muresan
197dbfbbcb feat(toolbar-button-clicked) Enhance toolbar buttons with notify click
- add possibility to allow execution of the button's routine besides triggering
`toolbarButtonClicked` API event
- keep backwards compatibility
- get rid of `ToolbarButton`
2022-01-04 13:21:00 +02:00
Calin Chitu
847dc2a7bb fix(participants-pane) fix search value clear when closing pane 2022-01-04 10:52:42 +02:00
Christoph Settgast
7f26e7f927 fix(lang) update German translation 2021-12-28 07:15:37 +01:00
Mejans
6247d45b9e fix(lang) update Occitan translation 2021-12-24 17:30:52 +01:00
Дамян Минков
04f9ad32e1 fix(breakout-rooms): Adds few nil checks in lua code. 2021-12-23 14:40:39 -06:00
Дамян Минков
348414cc84 fix: Fixes muted state for moderators when login (secure-domain). 2021-12-23 13:47:25 -06:00
Robert Pintilii
804573e9aa fix(title-bar) Updated animation duration (#10688) 2021-12-23 15:06:14 +02:00
gpatel-fr
9dd3941388 fix(lang) make fr language file format consistent 2021-12-23 13:15:28 +01:00
Boris Grozev
f341a4e4eb fix: Add ipv6 networks to coturn's deny list. 2021-12-22 17:35:06 -06:00
Palych56
1c462996f5 Added translation of toolbar icons (#10563)
* Added translation of toolbar icons

* fix the indentation
2021-12-22 17:34:36 -06:00
Дамян Минков
1316c48964 chore(deps) lib-jitsi-meet@latest
* fix: Drop unused region info from presence.
* fix: Reads lobby jid from correct location in the error. (#1830)
* feat: Adjust setReceiverConstraints to use new format (#1813)

63c3e1f869...55a03ac1b5
2021-12-22 17:33:48 -06:00
Björn Broer
1080404de9 Add Dutch translations Participants Pane and Chat/Polls 2021-12-22 17:33:41 -06:00
Mariusz Krzaczkowski
55ef73875e [i18n] Update for Polish (#10643)
* [i18n] Update for Polish

* [i18n] Update for Polish

* [i18n] Update for Polish

* [i18n] Update for Polish

* [i18n] Update for Polish
2021-12-22 17:33:28 -06:00
Ali Alhaidary
afeb3e0e69 Update main-ar.json 2021-12-22 17:33:18 -06:00
gpatel-fr
ca227df7ec fix(lang) update french translation 2021-12-22 17:33:10 -06:00
Alexey Matveev
fb843a7ecf fix(lang) updated Russian translation 2021-12-22 17:32:53 -06:00
JohnProv
af985d8fd8 Update main-nl.json
Fix wrong change (e-mail > email)
2021-12-22 17:32:45 -06:00
Дамян Минков
8d62e010e0 feat: Skips notifications for messages from history (the messages on join). 2021-12-22 16:13:12 -06:00
Дамян Минков
1c4283eeca feat: Edits messages display name on breakout info received. Fixes #10671. 2021-12-22 16:13:12 -06:00
Дамян Минков
c64d1a97c1 feat: Adds internal action for editing chat messages. 2021-12-22 16:13:12 -06:00
Дамян Минков
6159504478 feat: Adds id to chat messages internal state. 2021-12-22 16:13:12 -06:00
Дамян Минков
f2efdfcbc1 feat: Drop unused constants. 2021-12-22 16:13:12 -06:00
Дамян Минков
6682167800 fix: Fixes showing user region. 2021-12-22 15:39:33 -06:00
Дамян Минков
b084aae212 fix: Generates correct join error for lobby. (#10673)
* fix: Drops wrong x tag.

* fix: Generates correct join error for lobby.

We were adding lobbyroom element in a location that violates the rfc and xmpp errors.
We add now and the correct one and will drop the wrong node when all clients are updated.
https://datatracker.ietf.org/doc/html/draft-ietf-xmpp-3920bis#section-8.3.2

* squash: Add todo comment.

* squash: Updates namespace.
2021-12-22 14:40:20 -06:00
Calin Chitu
a436a889a9 fix(base) fixed text going out of share meeting container 2021-12-21 15:24:38 +02:00
Robert Pintilii
9816be4745 fix(participants-pane) Make search work with breakout rooms (#10668)
Web and native
2021-12-21 14:51:39 +02:00
Gabriel Borlea
b9e182b7cc feat(facial-expressions): send facial expressions to webhook endpoint (#10585) 2021-12-21 13:46:54 +02:00
Robert Pintilii
da2b920dbe feat(conference-info) Updated title bar (#10670)
Updated animations
Added raised hands counter
Added max width to title bar
2021-12-21 12:22:30 +02:00
Horatiu Muresan
d22d95e8a5 fix(prejoin) Consider user selection for prejoin only on mount 2021-12-20 11:34:40 +02:00
Robert Pintilii
d44660527b fix(thumbnail) Update tile resizing constraints (#10645)
disableTileEnlargement config now uses old behaviour (small tiles, not just small video in the tiles)
Update Firefox scrollbar style to match webkit
Show more rows when height allows it instead of stretching a fixed number of rows, but make sure we always try to fill the whole viewport
Added constraints for how narrow portrait tiles can be and how wide landscape tiles can be
Video should cover whole tile in tile view unless disableTileEnlargement is set or video is portrait
Added min height in px for tiles
2021-12-20 11:32:31 +02:00
Mihaela Dumitru
5cc3fade8f feat(config): add flag to hide the participant display name (#10650) 2021-12-20 10:46:47 +02:00
Gabriel Borlea
f8340bfd41 fix(speaker-stats): responsiveness of facial expressions (#10664) 2021-12-20 10:45:54 +02:00
Robert Pintilii
a7bf037363 feat(raise-hand) Update raised hand design (#10651)
Updated indicator color and background color
Added border on thumbnails
Web and Native
2021-12-20 10:44:22 +02:00
Robert Pintilii
a42483c84b fix(rn, tileview) Add SafeAreaView to Tile View (#10642) 2021-12-20 10:27:55 +02:00
tmoldovan8x8
476ddeac41 fix(rn, recording) adds _toggleScreenshotCapture function to AbstractStartRecordingDialog 2021-12-20 08:41:29 +02:00
Hristo Terezov
12bc054386 feat(Avatar): CORS mode support. 2021-12-17 14:41:11 -06:00
Дамян Минков
32aa40b396 fix(breakout-rooms): Fix polls usage. 2021-12-17 13:53:00 -06:00
Ali Alhaidary
11bbedf9ac fix(lang) updated Arabic translation 2021-12-17 17:57:06 +01:00
Robert Pintilii
56883f0a65 fix(theme) Update colors (#10649) 2021-12-17 15:05:12 +02:00
Mihaela Dumitru
8e9034601d feat(chat/settings) - add ephemeral chat notifications with user settings support (#10617) 2021-12-17 14:39:15 +02:00
wfleischer
ce0a044742 fix(breakout-rooms): close option shown to non-moderators (#10648)
Co-authored-by: Werner Fleischer <70745309+wernf@users.noreply.github.com>
2021-12-17 14:11:01 +02:00
Mihaela Dumitru
39e0dc84e0 feat(external-api): add local subject command (#10636)
* feat(external-api): add local subject command

* add to whitelist

* apply config value
2021-12-17 09:38:15 +02:00
Дамян Минков
09613167a6 fix(breakout-rooms): Adds a check for missing room. 2021-12-16 12:04:53 -06:00
William Liang
5461bb52c8 feat: Update video receiver constraints to use source names (#10527)
* feat: Use source name based receiver constraints

* add sourceNameSignaling feature flag to config

* move source name specific variables into if block

* ensure sourceName is defined in constraints

* use source name for selectedSources

* use selector to find video track by participant id

* add selector to encapsulate logic to get track source name

* refactor getTrackSourceNameByMediaTypeAndParticipant selector

* rename variable

* move flags config into Feature Flags section

* do not set constraints for local large video

* rename prioritizedSources to onStageSources

* fix flow error

* refactor visibleRemoteTrackSourceNames to a constant

* use selector to get feature flags

* rename selector function

* fix flow error

* add selector for sourceNameSignaling feature flag
2021-12-16 11:49:36 -06:00
Дамян Минков
5dee37dd82 Self view refactor (#10620)
* feat: Drops hide self-view setting from profile tab.

* feat: Moves function for disableSelfView value in base/settings.

* squash: Drops notification.

* feat: Move hide self view option in more tab.

* feat: Move hide self view option in more tab.

* feat: Adds option to disable self view UI settings.

* squash: Disable settings when controlled from config.
2021-12-16 10:55:45 -06:00
Luis Guzman
2a236b9327 fix(lang) update Spanish translation 2021-12-16 17:40:44 +01:00
Дамян Минков
e7bac3ad44 fix: Fixes emitting conference left event in iframeAPI.
Moving to breakout room and back in main room do not fire videoConferenceLeft events.
And the videoConferenceJoined was reporting wrong conference name on join.
2021-12-16 09:40:14 -06:00
Avram Tudor
ffe74ca68b fix(tile-view) fix screensharing size in self view (#10634)
clean-up overriden css for tileview video tags
2021-12-16 15:33:30 +02:00
Дамян Минков
c8b5043d6b fix: Fixes destroying main room when breakout rooms are enabled.
By the time the timer is fired the room maybe recreated (destroyed and created again) and we do not want to destroy it again. The timer was keeping a reference to the old room and is destroying it without notifying the future occupants(jicofo).
Drop save, as we do not need it before destroying, check lobby.
2021-12-15 21:59:23 -06:00
Shawn
8fa22ce059 fix: participant join notifications 2021-12-15 21:59:14 -06:00
jan-di-cgm
a6ec9e9f5d Fix default values for hideConferenceSubject/-Timer 2021-12-15 20:06:21 -06:00
Jaya Allamsetty
ea2407191a chore(deps) lib-jitsi-meet@latest
* fix(xmpp): fix race in p2p set codecs

d630bc32a1...63c3e1f869
2021-12-15 16:28:30 -05:00
José Luís Andrade
ea485f9974 fix(lang) update Portuguese translation 2021-12-15 16:12:47 +01:00
Robert Pintilii
91437c50e3 feat(thumbnail) Video thumbnails redesign and refactor (#10351)
Update video thumbnail design
Update design of indicators
In filmstrip view move Screen Sharing indicator to the top
Removed dominant speaker indicator
Use ContextMenu component for the connection stats popover
Combine Remove video menu and Meeting participant context menu into one component
Moved some styles from SCSS to JSS
Fix mobile avatars too big
Fix mobile horizontal scroll
Created button for Send to breakout room action
2021-12-15 15:18:41 +02:00
Jasper
0503a83667 fix(lang) update Dutch translations 2021-12-15 08:18:50 +01:00
Дамян Минков
648b22bb6d fix: Use default remote display name in speaker stats when one is missing. 2021-12-14 09:29:41 -06:00
Дамян Минков
715b22bfb5 fix: Respects disable reactions moderation flag for popups. 2021-12-14 09:29:41 -06:00
Robert Pintilii
913945e820 fix(overflow-menu) Use fixed height only on drawer (#10612) 2021-12-14 13:39:01 +02:00
Ashiq Hassan
0e717d8388 fix(config.js) Added missing participant left notification key. 2021-12-14 12:07:10 +01:00
Vlad Piersec
d2619b4dd3 fix(Prejoin): Allow changing 'Enable pre meeting screen' option while prejoin screen visible 2021-12-14 10:52:28 +02:00
Vlad Piersec
35b76a2f7c fix(Avatar): Fix initials when avatar contains multiple special characters 2021-12-14 10:47:05 +02:00
Дамян Минков
f620d101ba fix: Fixes disable moderation sounds in meeting. (#10604)
* fix: Fixes disable moderation sounds in meeting.

Moderators in the meeting were sending presence update after one moderator turn it on, which even my result a inconsistent state and flipping the state between moderators several times.

* squash: Adds option to disable reaction moderation.
2021-12-13 13:46:05 -06:00
Horatiu Muresan
70d8a46c05 feat(profile-settings): Hide email field under profile settings 2021-12-13 17:17:38 +02:00
Gabriel Borlea
40844afb60 fix(speaker-stats): prevent search from closing when enter pressed and from keeping previous state (#10597)
* fix(speaker-stats): prevent search from closing when enter pressed and from keeping previous state

* fix(speaker-stats): remove unnecessary blank lines

* fix(speaker-stats): add empty dependencies to prevent dismiss callback

* add(speaker-stats): reset search criteria action
2021-12-13 16:11:07 +02:00
Robert Pintilii
a6a24fa973 fix(overflow-menu) Pin reactions on menu bottom on mobile web (#10599)
Move some styles from SCSS to JSS
2021-12-13 15:51:05 +02:00
Vlad Piersec
69cbb7e103 fix(Polls): Calculate vote percentage based on total number of votes
Percentage was previously calculated based on number of voters
2021-12-13 12:54:36 +02:00
Vlad Piersec
f20a50d8a6 feat(i18n): Allow label rewrite via advanced branding 2021-12-13 12:02:34 +02:00
Saúl Ibarra Corretgé
df3545d287 fix(rn) fix broken mobile build
Importing the entire feature triggers web UI imports.
2021-12-11 16:55:46 +01:00
Christoph Settgast
22d782f61f fix(lang) update German translation 2021-12-11 12:44:09 +01:00
Дамян Минков
ce195d82d6 chore(deps) lib-jitsi-meet@latest
* fix: Fixes set effect and correct presence state.

8a95fda259...d630bc32a1
2021-12-10 15:39:51 -06:00
Jaya Allamsetty
229e65133c feat(media) Disable desktopshare when the video sender limit is reached. 2021-12-10 14:58:55 -05:00
Jaya Allamsetty
11eb6689dc chore(deps) lib-jitsi-meet@latest
* fix(presence): Do not sent presence if there is no active media session.
* fix: server-side callstats is never enabled (#1823)
* fix(JitsiConference) squelch bogus p2p session end error

8aa35dae40...8a95fda259
2021-12-10 12:23:43 -05:00
Calinteodor
bf3cc65f4c feat(security) created SecurityOptions React Navigation screen (#10509)
* feat(security) Security Options screen
2021-12-10 18:23:27 +02:00
Hristo Terezov
75e6dd389f feat(index.html): Add fonts.html SSI. 2021-12-10 10:20:54 -06:00
Rokixy
076113940b typo fix
dekstopAudioStream --> desktopAudioStream
2021-12-10 09:03:18 -06:00
Saúl Ibarra Corretgé
e6accd40e1 fix(breakout-rooms) ensure we use the same media types when joining
Only audio and video are considered. Screen sharing won't be preserved.
2021-12-10 15:51:06 +01:00
Saúl Ibarra Corretgé
7f0cfed981 fix(rn,breakout-rooms) create desired local tracks when joining rooms 2021-12-10 15:50:11 +01:00
Saúl Ibarra Corretgé
9279586e8c fix(tracks) fix disposing of local tracks
Don't just clear the storage for them, local tracks must be disposed, in order
for RN capturer to be freed for example.
2021-12-10 15:49:44 +01:00
Robert Pintilii
f8908c143e fix(disableSelfView) Fix issue with remote participant video (#10582)
Fix issue where last participant is shown as inactive when the self view is hidden
2021-12-10 15:16:02 +02:00
Saúl Ibarra Corretgé
c705dbaa2f fix(rn,breakout-rooms) fix not rendering display names 2021-12-10 13:37:59 +01:00
Saúl Ibarra Corretgé
1fa43ca4e7 chore(rn,versions) bump app and sdk versions 2021-12-10 10:05:34 +01:00
Jaya Allamsetty
9528cbad0e fix(notifications) Adjust the timeout for unmute blocked notifications. 2021-12-09 14:03:16 -06:00
Jaya Allamsetty
a23d57b5ff fix(shortcuts) Ignore keyboard shortcuts when the button are disabled. 2021-12-09 14:03:16 -06:00
Дамян Минков
ae5c364333 fix(breakout-rooms) cleanup local tracks when a conference is left. 2021-12-09 12:13:59 -06:00
Jaya Allamsetty
700c7c523d feat(tracks) Clean up the track if a source addition is rejected. (#10562)
* feat(tracks) Clean up the track if a source addition is rejected.
When jicofo rejects a source-add because of sendder limits, dispose and remove the local track from the conference.

* chore(deps) update LJM to latest.
2021-12-09 07:48:55 -06:00
Calin Chitu
5dbf4845fb feat(chat) keyboard covering input on android fix 2021-12-09 14:51:27 +02:00
Payetus
661a3d34be fix(lang) update Catalan translation
Co-authored-by: Payetus <payet91@gmail.xom>
2021-12-09 13:27:21 +01:00
Robert Pintilii
0e9b40c410 fix(notifications) Create web middleware (#10568)
Fixes broken native
2021-12-09 13:31:43 +02:00
Avram Tudor
51b827ebb0 fix(browser-compatibility) hide launch in web for unsupported mobile browsers (#10569) 2021-12-09 13:16:08 +02:00
Avram Tudor
16a2c729e0 chore(deps) lib-jitsi-meet@latest (#10566)
* fix(browser-capabilities) expose supported mobile browsers

e9e37099a1...161da84ac0
2021-12-09 12:36:11 +02:00
Saúl Ibarra Corretgé
ed5bb871f4 fix(android) fix NoClassDefFoundError for Landroid/graphics/ColorSpace
Fixes: https://github.com/jitsi/jitsi-meet/issues/10182
2021-12-09 10:51:42 +01:00
robertpin
d96ecc5b65 fix(screenshot-capture) Use feature on web only
Fixes broken native
2021-12-09 10:02:23 +01:00
robertpin
41f11e5adb feat(self-view) Added ability to hide self view
Added config option disableSelfView. This disables it on web and native

Added button on local video menu and toggle in settings on web to change the setting
2021-12-09 08:45:16 +01:00
Saúl Ibarra Corretgé
c48aa44af3 fix(breakout-rooms) cleanup remote tracks when a conference is left 2021-12-08 16:52:38 -06:00
Christoph Settgast
085b07efcd fix(rn) join conference if started by moderator
Issue was that APP is not defined at this place on mobile,
thus this raising ReferenceError which caused the waitForOwner to break

Closes: #10211
2021-12-08 16:52:23 -06:00
Saúl Ibarra Corretgé
60dcac96a6 fix(breakout-rooms) fix non-functional context menu
Close the menu after sending a participant to a breakout room, that will detach
the context menu from the current participant and it will work properly when
they join back.
2021-12-08 15:11:18 -06:00
robertpin
2e22eb5169 fix(overflow-drawer) Only use overflow drawer on mobile 2021-12-08 19:55:16 +01:00
Дамян Минков
e2beb2f3b1 chore(deps) lib-jitsi-meet@latest
* fix(tpc) disable ulpfec on chrome 96 (jitsi/lib-jitsi-meet#1816)
* fix: Fixes call to _setTrackMuteStatus.
* Refactor presence update (jitsi/lib-jitsi-meet#1814)

9e5d83f4ac...e9e37099a1
2021-12-08 12:41:47 -05:00
tmoldovan8x8
664f23a395 chore(rn) updates react-native-webrtc 2021-12-08 18:00:04 +02:00
Robert Pintilii
dc20b2fafe fix(screenshot-capture) Update screenshot capture feature (#10443)
* fix(screenshot-capture) Update screenshot capture feature

Add participants jid list to request

Enable screenshot capture only when recording is also on

Updated interval
2021-12-08 16:15:59 +02:00
Saúl Ibarra Corretgé
00ae2dc6a9 fix(virtual-backgrounds) make error message translatable 2021-12-08 15:12:32 +01:00
Saúl Ibarra Corretgé
a182f53cdc fix(virtual-backgrounds) fix error if we failed to load the model
If another try is made, show an error notification instead of failing with an
exception.
2021-12-08 15:12:32 +01:00
Horatiu Muresan
9b3f254c6b feat(end-meet-for-all) Trigger notifyReadyToClose event on end meetin… (#10549) 2021-12-08 16:11:31 +02:00
Vlad Piersec
0188086dde fix(participants-list): Avoid ui moving on input focus 2021-12-08 15:32:51 +02:00
JH
340698a546 fix(lang) update sv translation 2021-12-08 14:05:45 +01:00
SiderealArt
0920bda7b8 fix(lang) update Traditional Chinese (Taiwan) translation 2021-12-08 09:14:11 +01:00
Horatiu Muresan
10e5b2f572 feat(prejoin) Add possibility to hide extra join options buttons (#10434) 2021-12-08 09:53:19 +02:00
José Luís Andrade
81e9d01921 fix(lang) update Portuguese translation 2021-12-08 08:33:21 +01:00
Gabriel Borlea
0d5beb0c4e fix(facial-expressions) load worker as a blob 2021-12-08 08:27:17 +01:00
Ali Alhaidary
b890f34a53 fix(lang) update Arabic translation 2021-12-08 08:25:38 +01:00
Jaya Allamsetty
b19e4d76b5 fix(media) dispatch the unmute blocked action irrepective of the muted state.
This fixes an issue where the user muted by focus is able to unmute themselves even when the sender limit has been reached.
2021-12-07 17:13:29 -06:00
Christoph Settgast
65589937ea fix(breakout,av-moderation): support non-ascii tenant names
Same applies to tenant names as it applies to room names, as the
tenants/subdomains are prefixed to the room names in prosody.

Signed-off-by: Christoph Settgast <csett86@web.de>
2021-12-07 18:31:36 +01:00
Christoph Settgast
a6bc51cff1 fix(breakout,av-moderation): support non-ascii room names
rooms are created in prosody in their urlencoded form, eg täst
becomes t%c3%a4st@conference.jitsi.example.org

As local params = formdecode(query) contains an urldecode, we
need to reencode the room name so that the room can be found in
prosody.

Closes: #10525
Signed-off-by: Christoph Settgast <csett86@web.de>
2021-12-07 18:31:36 +01:00
Saúl Ibarra Corretgé
ae3fb20d65 fix(breakout-rooms) fix not waiting to leave the room
We need to wait for it before we start joining.
2021-12-07 16:40:13 +01:00
Vlad Piersec
bfc0567e32 fix(rn,chat): Fix chat and polls title 2021-12-07 11:13:25 +01:00
Mihaela Dumitru
0fb29a0c7a feat(external-api): enhance recordingLinkAvailable to provide ttl info 2021-12-07 10:57:04 +01:00
gpatel-fr
822850d888 fix(lang) update french translation 2021-12-04 13:18:24 +01:00
Christoph Settgast
64e6c5f461 fix(lang) update German translation 2021-12-04 07:20:26 +01:00
Andrei Oltean
a077043f1b feat: (moderate-reaction-sounds) enable moderator to mute reaction sounds 2021-12-03 18:36:57 +02:00
tmoldovan8x8
646fdef6bb fix(screen-sharing, picture-in-picture) re-enables PIP after stopping screen-share 2021-12-03 15:44:19 +02:00
430 changed files with 14089 additions and 10702 deletions

View File

@@ -2,18 +2,6 @@
; We fork some components by platform
.*/*[.]android.js
; Ignore unexpected extra "@providesModule"
.*/node_modules/.*/node_modules/fbjs/.*
node_modules/react-native/Libraries/react-native/React.js
; Ignore duplicate module providers
; For RN Apps installed via npm, "Libraries" folder is inside
; "node_modules/react-native" but in the source repo it is in the root
node_modules/react-native/Libraries/react-native/React.js
; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js
; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*
@@ -22,7 +10,7 @@ node_modules/react-native/Libraries/polyfills/.*
node_modules/warning/.*
; Flow doesn't support platforms
.*/Libraries/Utilities/HMRLoadingView.js
.*/Libraries/Utilities/LoadingView.js
[untyped]
.*/node_modules/@react-native-community/cli/.*/.*
@@ -39,7 +27,7 @@ node_modules/warning/.*
[include]
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/interface.js
node_modules/react-native/flow/
[options]
@@ -60,27 +48,10 @@ module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js
module.system=haste
module.system.haste.use_name_reducers=true
# get basename
module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1'
# strip .js or .js.flow suffix
module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1'
# strip .ios suffix
module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1'
module.system.haste.paths.blacklist=.*/__tests__/.*
module.system.haste.paths.blacklist=.*/__mocks__/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/Libraries/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/RNTester/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/IntegrationTests/.*
module.system.haste.paths.blacklist=<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation.js
module.system.haste.paths.blacklist=<PROJECT_ROOT>/node_modules/react-native/Libraries/Animated/src/polyfills/.*
munge_underscores=true
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
suppress_type=$FlowIssue
suppress_type=$FlowFixMe
@@ -89,7 +60,6 @@ suppress_type=$FlowFixMeState
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[lints]
@@ -100,7 +70,6 @@ untyped-type-import=warn
nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
inexact-spread=warn
unnecessary-invariant=warn
signature-verification-failure=warn
deprecated-utility=error
@@ -115,4 +84,4 @@ untyped-import
untyped-type-import
[version]
^0.104.0
^0.122.0

View File

@@ -102,7 +102,7 @@ deploy-facial-expressions:
deploy-css:
$(NODE_SASS) $(STYLES_MAIN) $(STYLES_BUNDLE) && \
$(CLEANCSS) --skip-rebase $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
$(CLEANCSS) --skip-rebase $(STYLES_BUNDLE) > $(STYLES_DESTINATION) && \
rm $(STYLES_BUNDLE)
deploy-local:

View File

@@ -85,4 +85,9 @@
# ^^^ We added the above when we switched minifyEnabled on.
# Rule to avoid build errors related to SVGs.
-keep public class com.horcrux.svg.** {*;}
-keep public class com.horcrux.svg.** {*;}
# https://github.com/facebook/fresco/issues/2638
-keep public class com.facebook.imageutils.** {
public *;
}

View File

@@ -3,5 +3,6 @@
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
</style>
<item name="android:windowDisablePreview">true</item>
</style>
</resources>

View File

@@ -44,6 +44,7 @@ allprojects {
repositories {
google()
jcenter()
maven { url 'https://www.jitpack.io' }
// React Native (JS, Obj-C sources, Android binaries) is installed from npm.
maven { url "$rootDir/../node_modules/react-native/android" }
// Android JSC is installed from npm.

View File

@@ -26,5 +26,5 @@ android.useAndroidX=true
android.enableJetifier=true
android.bundle.enableUncompressedNativeLibs=false
appVersion=21.5.0
sdkVersion=4.0.0
appVersion=22.0.0
sdkVersion=5.0.0

51
android/gradlew vendored
View File

@@ -1,5 +1,21 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
@@ -109,8 +125,8 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
@@ -138,19 +154,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
i=`expr $i + 1`
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -159,14 +175,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

187
android/gradlew.bat vendored
View File

@@ -1,84 +1,103 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@@ -68,6 +68,7 @@ dependencies {
implementation project(':react-native-async-storage')
implementation project(':react-native-background-timer')
implementation project(':react-native-calendar-events')
implementation project(':react-native-community_clipboard')
implementation project(':react-native-community_netinfo')
implementation project(':react-native-default-preference')
implementation project(':react-native-gesture-handler')
@@ -75,6 +76,7 @@ dependencies {
implementation project(':react-native-immersive')
implementation project(':react-native-keep-awake')
implementation project(':react-native-masked-view_masked-view')
implementation project(':react-native-pager-view')
implementation project(':react-native-performance')
implementation project(':react-native-reanimated')
implementation project(':react-native-safe-area-context')

View File

@@ -26,7 +26,6 @@ import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.devsupport.DevInternalSettings;
import com.facebook.react.jscexecutor.JSCExecutorFactory;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.uimanager.ViewManager;
@@ -177,10 +176,12 @@ class ReactInstanceManagerHolder {
= new ArrayList<>(Arrays.asList(
new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(),
new com.ocetnik.timer.BackgroundTimerPackage(),
new com.calendarevents.CalendarEventsPackage(),
new com.calendarevents.RNCalendarEventsPackage(),
new com.corbt.keepawake.KCKeepAwakePackage(),
new com.facebook.react.shell.MainReactPackage(),
new com.reactnativecommunity.clipboard.ClipboardPackage(),
new com.reactnativecommunity.netinfo.NetInfoPackage(),
new com.reactnativepagerview.PagerViewPackage(),
new com.oblador.performance.PerformancePackage(),
new com.reactnativecommunity.slider.ReactSliderPackage(),
new com.brentvatne.react.ReactVideoPackage(),
@@ -218,7 +219,7 @@ class ReactInstanceManagerHolder {
// RNGoogleSigninPackage
try {
Class<?> googlePackageClass = Class.forName("co.apptailor.googlesignin.RNGoogleSigninPackage");
Class<?> googlePackageClass = Class.forName("com.reactnativegooglesignin.RNGoogleSigninPackage");
Constructor constructor = googlePackageClass.getConstructor();
packages.add((ReactPackage)constructor.newInstance());
} catch (Exception e) {
@@ -241,13 +242,6 @@ class ReactInstanceManagerHolder {
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
// Disable delta updates on Android, they have caused trouble.
DevInternalSettings devSettings
= (DevInternalSettings)reactInstanceManager.getDevSupportManager().getDevSettings();
if (devSettings != null) {
devSettings.setBundleDeltasEnabled(false);
}
// Register our uncaught exception handler.
JitsiMeetUncaughtExceptionHandler.register();
}

View File

@@ -9,6 +9,8 @@ include ':react-native-background-timer'
project(':react-native-background-timer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-timer/android')
include ':react-native-calendar-events'
project(':react-native-calendar-events').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-calendar-events/android')
include ':react-native-community_clipboard'
project(':react-native-community_clipboard').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/clipboard/android')
include ':react-native-community_netinfo'
project(':react-native-community_netinfo').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/netinfo/android')
include ':react-native-default-preference'
@@ -20,13 +22,15 @@ project(':react-native-gesture-handler').projectDir = new File(rootProject.proje
include ':react-native-get-random-values'
project(':react-native-get-random-values').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-get-random-values/android')
include ':react-native-google-signin'
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/google-signin/android')
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-google-signin/google-signin/android')
include ':react-native-immersive'
project(':react-native-immersive').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immersive/android')
include ':react-native-keep-awake'
project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android')
include ':react-native-masked-view_masked-view'
project(':react-native-masked-view_masked-view').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-masked-view/masked-view/android')
include ':react-native-pager-view'
project(':react-native-pager-view').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-pager-view/android')
include ':react-native-performance'
project(':react-native-performance').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-performance/android')
include ':react-native-reanimated'

View File

@@ -71,13 +71,12 @@ import {
JitsiMediaDevicesEvents,
JitsiParticipantConnectionStatus,
JitsiTrackErrors,
JitsiTrackEvents
JitsiTrackEvents,
JitsiRecordingConstants
} from './react/features/base/lib-jitsi-meet';
import {
getStartWithAudioMuted,
getStartWithVideoMuted,
isAudioMuted,
isVideoMuted,
isVideoMutedByUser,
MEDIA_TYPE,
setAudioAvailable,
@@ -136,12 +135,12 @@ import { mediaPermissionPromptVisibilityChanged, toggleSlowGUMOverlay } from './
import { suspendDetected } from './react/features/power-monitor';
import {
initPrejoin,
isPrejoinPageEnabled,
isPrejoinPageVisible,
makePrecallTest,
setJoiningInProgress,
setPrejoinPageVisibility
} from './react/features/prejoin';
import { getActiveSession } from './react/features/recording/functions';
import { disableReceiver, stopReceiver } from './react/features/remote-control';
import { setScreenAudioShareState, isScreenAudioShared } from './react/features/screen-share/';
import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture';
@@ -797,7 +796,21 @@ export default {
logger.warn('initial device list initialization failed', error);
}
if (isPrejoinPageEnabled(APP.store.getState())) {
const handleStartAudioMuted = (options, tracks) => {
if (options.startWithAudioMuted) {
// Always add the track on Safari because of a known issue where audio playout doesn't happen
// if the user joins audio and video muted, i.e., if there is no local media capture.
if (browser.isWebKitBased()) {
this.muteAudio(true, true);
} else {
return tracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
}
}
return tracks;
};
if (isPrejoinPageVisible(APP.store.getState())) {
_connectionPromise = connect(roomName).then(c => {
// we want to initialize it early, in case of errors to be able
// to gather logs
@@ -828,25 +841,28 @@ export default {
this._displayErrorsForCreateInitialLocalTracks(errors);
return this._setLocalAudioVideoStreams(tracks);
let localTracks = handleStartAudioMuted(initialOptions, tracks);
// in case where gum is slow and resolves after the startAudio/VideoMuted coming from jicofo, we can be
// join unmuted even though jicofo had instruct us to mute, so let's respect that before passing the tracks
if (!browser.isWebKitBased()) {
if (room?.isStartAudioMuted()) {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
}
}
if (room?.isStartVideoMuted()) {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.VIDEO);
}
return this._setLocalAudioVideoStreams(localTracks);
}
const [ tracks, con ] = await this.createInitialLocalTracksAndConnect(roomName, initialOptions);
let localTracks = tracks;
this._initDeviceList(true);
if (initialOptions.startWithAudioMuted) {
// Always add the track on Safari because of a known issue where audio playout doesn't happen
// if the user joins audio and video muted, i.e., if there is no local media capture.
if (browser.isWebKitBased()) {
this.muteAudio(true, true);
} else {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
}
}
return this.startConference(con, localTracks);
return this.startConference(con, handleStartAudioMuted(initialOptions, tracks));
},
/**
@@ -1333,18 +1349,19 @@ export default {
/**
* Used by the Breakout Rooms feature to join a breakout room or go back to the main room.
*/
async joinRoom(roomName) {
async joinRoom(roomName, options) {
// Reset VideoLayout. It's destroyed in features/video-layout/middleware.web.js so re-initialize it.
VideoLayout.initLargeVideo();
VideoLayout.resizeVideoArea();
// Destroy old tracks.
APP.store.dispatch(destroyLocalTracks());
// Restore initial state.
this._localTracksInitialized = false;
this.isSharingScreen = false;
this.localPresenterVideo = null;
this.roomName = roomName;
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks();
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(options);
const localTracks = await tryCreateLocalTracks;
this._displayErrorsForCreateInitialLocalTracks(errors);
@@ -1710,10 +1727,10 @@ export default {
= this._turnScreenSharingOff.bind(this, didHaveVideo);
const desktopVideoStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);
const dekstopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
const desktopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
if (dekstopAudioStream) {
dekstopAudioStream.on(
if (desktopAudioStream) {
desktopAudioStream.on(
JitsiTrackEvents.LOCAL_TRACK_STOPPED,
() => {
logger.debug(`Local screensharing audio track stopped. ${this.isSharingScreen}`);
@@ -1935,7 +1952,9 @@ export default {
.then(() => {
this.videoSwitchInProgress = false;
if (config.enableScreenshotCapture) {
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
if (getActiveSession(APP.store.getState(), JitsiRecordingConstants.mode.FILE)) {
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
}
}
sendAnalytics(createScreenSharingEvent('started'));
logger.log('Screen sharing started');
@@ -2133,6 +2152,8 @@ export default {
}
});
room.on(JitsiConferenceEvents.TRACK_UNMUTE_REJECTED, track => APP.store.dispatch(destroyLocalTracks(track)));
room.on(JitsiConferenceEvents.SUBJECT_CHANGED,
subject => APP.store.dispatch(conferenceSubjectChanged(subject)));
@@ -2264,22 +2285,12 @@ export default {
room.on(
JitsiConferenceEvents.AUDIO_UNMUTE_PERMISSIONS_CHANGED,
disableAudioMuteChange => {
const muted = isAudioMuted(APP.store.getState());
// Disable the mute button only if its muted.
if (!disableAudioMuteChange || (disableAudioMuteChange && muted)) {
APP.store.dispatch(setAudioUnmutePermissions(disableAudioMuteChange));
}
APP.store.dispatch(setAudioUnmutePermissions(disableAudioMuteChange));
});
room.on(
JitsiConferenceEvents.VIDEO_UNMUTE_PERMISSIONS_CHANGED,
disableVideoMuteChange => {
const muted = isVideoMuted(APP.store.getState());
// Disable the mute button only if its muted.
if (!disableVideoMuteChange || (disableVideoMuteChange && muted)) {
APP.store.dispatch(setVideoUnmutePermissions(disableVideoMuteChange));
}
APP.store.dispatch(setVideoUnmutePermissions(disableVideoMuteChange));
});
APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {

138
config.js
View File

@@ -74,15 +74,30 @@ var config = {
// callStatsThreshold: 5 // enable callstats for 5% of the users.
},
// Feature Flags.
flags: {
// Enables source names in the signaling.
// sourceNameSignaling: false,
},
// Disables moderator indicators.
// disableModeratorIndicator: false,
// Disables the reactions feature.
// disableReactions: true,
// Disables the reactions moderation feature.
// disableReactionsModeration: false,
// Disables polls feature.
// disablePolls: false,
// Disables self-view tile. (hides it from tile view and from filmstrip)
// disableSelfView: false,
// Disables self-view settings in UI
// disableSelfViewSettings: false,
// Disables ICE/UDP by filtering out local and remote UDP candidates in
// signalling.
// webrtcIceUdpDisable: false,
@@ -475,12 +490,18 @@ var config = {
// Default remote name to be displayed
// defaultRemoteDisplayName: 'Fellow Jitster',
// Hides the display name from the participant thumbnail
// hideDisplayName: false
// Default language for the user interface.
// defaultLanguage: 'en',
// Disables profile and the edit of all fields from the profile settings (display name and email)
// disableProfile: false,
// Hides the email section under profile settings.
// hideEmailInSettings: false,
// Whether or not some features are checked based on token.
// enableFeaturesBasedOnToken: false,
@@ -496,8 +517,14 @@ var config = {
// and microsoftApiApplicationClientID
// enableCalendarIntegration: false,
// When 'true', it shows an intermediate page before joining, where the user can configure their devices.
// prejoinPageEnabled: false,
// Configs for prejoin page.
// prejoinConfig: {
// // When 'true', it shows an intermediate page before joining, where the user can configure their devices.
// // This replaces `prejoinPageEnabled`.
// enabled: true,
// // List of buttons to hide from the extra join options dropdown.
// hideExtraJoinButtons: ['no-audio', 'by-phone']
// },
// When 'true', the user cannot edit the display name.
// (Mainly useful when used in conjuction with the JWT so the JWT name becomes read only.)
@@ -519,6 +546,9 @@ var config = {
// Document should be focused for this option to work
// enableAutomaticUrlCopy: false,
// Array with avatar URL prefixes that need to use CORS.
// corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ],
// Base URL for a Gravatar-compatible service. Defaults to libravatar.
// gravatarBaseURL: 'https://seccdn.libravatar.org/avatar/',
@@ -585,41 +615,61 @@ var config = {
// alwaysVisible: false
// },
// Toolbar buttons which have their click event exposed through the API on
// `toolbarButtonClicked` event instead of executing the normal click routine.
// Toolbar buttons which have their click/tap event exposed through the API on
// `toolbarButtonClicked`. Passing a string for the button key will
// prevent execution of the click/tap routine; passing an object with `key` and
// `preventExecution` flag on false will not prevent execution of the click/tap
// routine. Below array with mixed mode for passing the buttons.
// buttonsWithNotifyClick: [
// 'camera',
// 'chat',
// 'closedcaptions',
// 'desktop',
// 'download',
// 'embedmeeting',
// 'etherpad',
// 'feedback',
// 'filmstrip',
// 'fullscreen',
// 'hangup',
// 'help',
// 'invite',
// 'livestreaming',
// 'microphone',
// 'mute-everyone',
// 'mute-video-everyone',
// 'participants-pane',
// 'profile',
// 'raisehand',
// 'recording',
// 'security',
// 'select-background',
// 'settings',
// 'shareaudio',
// 'sharedvideo',
// 'shortcuts',
// 'stats',
// 'tileview',
// 'toggle-camera',
// 'videoquality',
// '__end'
// 'camera',
// {
// key: 'chat',
// preventExecution: false
// },
// {
// key: 'closedcaptions',
// preventExecution: true
// },
// 'desktop',
// 'download',
// 'embedmeeting',
// 'etherpad',
// 'feedback',
// 'filmstrip',
// 'fullscreen',
// 'hangup',
// 'help',
// {
// key: 'invite',
// preventExecution: false
// },
// 'livestreaming',
// 'microphone',
// 'mute-everyone',
// 'mute-video-everyone',
// 'participants-pane',
// 'profile',
// {
// key: 'raisehand',
// preventExecution: true
// },
// 'recording',
// 'security',
// 'select-background',
// 'settings',
// 'shareaudio',
// 'sharedvideo',
// 'shortcuts',
// 'stats',
// 'tileview',
// 'toggle-camera',
// 'videoquality',
// // The add passcode button from the security dialog.
// {
// key: 'add-passcode',
// preventExecution: false
// }
// '__end'
// ],
// List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
@@ -995,14 +1045,15 @@ var config = {
// If true, tile view will not be enabled automatically when the participants count threshold is reached.
// disableTileView: true,
// If true, the tiles will be displayed contained within the available space rather than enlarged to cover it.
// If true, the tiles will be displayed contained within the available space rather than enlarged to cover it,
// with a 16:9 aspect ratio (old behaviour).
// disableTileEnlargement: true,
// Controls the visibility and behavior of the top header conference info labels.
// If a label's id is not in any of the 2 arrays, it will not be visible at all on the header.
// conferenceInfo: {
// // those labels will not be hidden in tandem with the toolbox.
// alwaysVisible: ['recording', 'local-recording'],
// alwaysVisible: ['recording', 'local-recording', 'raised-hands-count'],
// // those labels will be auto-hidden in tandem with the toolbox buttons.
// autoHide: [
// 'subject',
@@ -1016,10 +1067,10 @@ var config = {
// },
// Hides the conference subject
// hideConferenceSubject: true,
// hideConferenceSubject: false,
// Hides the conference timer.
// hideConferenceTimer: true,
// hideConferenceTimer: false,
// Hides the recording label
// hideRecordingLabel: false,
@@ -1030,6 +1081,9 @@ var config = {
// Sets the conference subject
// subject: 'Conference Subject',
// Sets the conference local subject
// localSubject: 'Conference Local Subject',
// This property is related to the use case when jitsi-meet is used via the IFrame API. When the property is true
// jitsi-meet will use the local storage of the host page instead of its own. This option is useful if the browser
// is not persisting the local storage inside the iframe.
@@ -1134,10 +1188,14 @@ var config = {
// 'lobby.joinRejectedMessage', // shown when while in a lobby, user's request to join is rejected
// 'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied
// 'localRecording.localRecording', // shown when a local recording is started
// 'notify.chatMessages', // shown when receiving chat messages while the chat window is closed
// 'notify.disconnected', // shown when a participant has left
// 'notify.connectedOneMember', // show when a participant joined
// 'notify.connectedTwoMembers', // show when two participants joined simultaneously
// 'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously
// 'notify.leftOneMember', // show when a participant left
// 'notify.leftTwoMembers', // show when two participants left simultaneously
// 'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously
// 'notify.grantedTo', // shown when moderator rights were granted to a participant
// 'notify.invitedOneMember', // shown when 1 participant has been invited
// 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited

View File

@@ -24,14 +24,6 @@
bottom: calc(#{$newToolbarSizeWithPadding}) !important;
}
/**
* Override @atlaskit/theme styling for the top toolbar so it displays over
* the video thumbnail while obscuring as little as possible.
*/
.videocontainer__toptoolbar > div > div {
background: none;
}
/**
* Keep overflow menu within screen vertical bounds and make it scrollable.

View File

@@ -121,9 +121,18 @@
}
}
.audio-preview-entry-text {
max-width: 178px;
&--nometer {
.audio-preview-entry-text {
max-width: 238px;
}
}
&--withmeter {
.audio-preview-entry-text {
max-width: 178px;
}
}
}
&-icon {

View File

@@ -6,6 +6,10 @@
* {
-webkit-user-select: none;
user-select: none;
// Firefox only
scrollbar-width: thin;
scrollbar-color: rgba(0, 0, 0, .5) transparent;
}
input,

View File

@@ -24,10 +24,9 @@
}
.drawer-menu {
max-height: calc(80vh - 64px);
background: #242528;
border-radius: 16px 16px 0 0;
overflow-y: scroll;
overflow-y: auto;
margin-bottom: env(safe-area-inset-bottom, 0);
width: 100%;
@@ -43,15 +42,6 @@
}
}
.popupmenu {
margin: auto;
width: 100%;
}
.popupmenu__item {
height: 48px;
}
&#{&} .overflow-menu {
margin: auto;
font-size: 1.2em;

View File

@@ -43,10 +43,5 @@
.popover {
margin: -16px -24px;
padding: 16px 24px;
z-index: $popoverZ;
}
.padded-content {
padding: 4px 8px;
}

View File

@@ -2,122 +2,18 @@
* Initialize
**/
.popupmenu {
background-color: $menuBG;
border-radius: 3px;
list-style-type: none;
min-width: 150px;
text-align: left;
padding: 0px;
white-space: nowrap;
.popupmenu__contents {
.popupmenu__volume-slider {
&::-webkit-slider-runnable-track {
background-color: $popupSliderColor;
}
&__item {
list-style-type: none;
height: 35px;
}
&::-moz-range-track {
background-color: $popupSliderColor;
}
// Link Appearance
&__link,
&__contents {
display: block;
box-sizing: border-box;
text-decoration: none;
height: 100%;
font-size: 9pt;
width: 100%;
cursor: pointer;
padding: 0 5px;
color: $popupMenuColor;
&:hover {
background-color: $popupMenuHoverBackground;
color: $popupMenuHoverColor;
}
&.disabled {
pointer-events: none;
}
}
&__list {
margin: 0;
padding: 0;
}
&__text {
display: inline-block;
margin-left: 8px;
vertical-align: middle;
}
&__link {
i {
cursor: pointer;
}
}
&__contents {
display: flex;
/**
* Positioning styles on the slider and its container are used to make
* the container fit the popup width, by removing the slider from the
* page flow, and then making the slider fit the container.
*/
.popupmenu__slider_container {
position: relative;
width: 100%;
.popupmenu__slider {
position: absolute;
top: 50%;
transform: translate(0, -50%);
width: 100%;
&::-webkit-slider-runnable-track {
background-color: $popupSliderColor;
}
&::-moz-range-track {
background-color: $popupSliderColor;
}
&::-ms-fill-lower {
background-color: $popupSliderColor;
}
&::-ms-fill-lower {
background-color: $popupSliderColor;
}
}
}
&__icon {
vertical-align: middle;
position: relative;
display: inline-block;
min-width: 20px;
height: 100%;
padding-right: 10px;
> * {
@include absoluteAligning();
}
}
.icon-kick,
.icon-play,
.icon-stop {
font-size: 8pt;
}
}
/**
* Override reset css styling modifying all lists and set negative margin to
* reduce the visibility of padding on AtlasKit
* InlineDialogs.
*/
ul.popupmenu {
margin: -16px -24px;
}
span.localvideomenu:hover ul.popupmenu, span.remotevideomenu:hover ul.popupmenu, ul.popupmenu:hover {
display:block !important;
}

View File

@@ -8,12 +8,6 @@
padding: 16px;
&.overflow {
width: auto;
padding-bottom: max(env(safe-area-inset-bottom, 0), 16px);
background-color: #141414;
box-shadow: none;
border-radius: 0;
position: relative;
.toolbox-icon {
width: 48px;

View File

@@ -1,11 +1,25 @@
.subject {
color: #fff;
margin-top: -120px;
transition: margin-top .3s ease-in;
transition: opacity .6s ease-in-out;
z-index: $zindex3;
margin-top: 20px;
opacity: 0;
&.visible {
margin-top: 20px;
opacity: 1;
}
&#autoHide.with-always-on {
overflow: hidden;
animation: hideSubject forwards .6s ease-out;
& > .subject-info-container {
justify-content: flex-start;
}
&.visible {
animation: showSubject forwards .6s ease-out;
}
}
}
@@ -36,10 +50,7 @@
line-height: 28px;
padding: 0 16px;
height: 28px;
@media (max-width: 700px) {
max-width: 100px;
}
max-width: 324px;
@media (max-width: 300px) {
display: none;
@@ -74,8 +85,29 @@
position: absolute;
top: 0;
height: 48px;
max-width: calc(100% - 24px);
}
.shift-right .details-container {
margin-left: calc(#{$sidebarWidth} / 2);
}
@keyframes hideSubject {
0% {
max-width: 100%;
}
100% {
max-width: 0;
}
}
@keyframes showSubject {
0% {
max-width: 0%;
}
100% {
max-width: 100%;
}
}

View File

@@ -13,9 +13,6 @@ $hangupFontSize: 2em;
*/
// Video layout.
$thumbnailToolbarHeight: 22px;
$thumbnailIndicatorBorder: 2px;
$thumbnailIndicatorSize: $thumbnailToolbarHeight;
$thumbnailVideoMargin: 2px;
$thumbnailsBorder: 2px;
$thumbnailVideoBorder: 2px;
@@ -56,19 +53,12 @@ $overflowMenuItemBackground: #36383C;
/**
* Video layout
*/
$videoThumbnailHovered: rgba(22, 94, 204, .4);
$videoThumbnailSelected: #165ECC;
$participantNameColor: #fff;
$thumbnailPictogramColor: #fff;
$dominantSpeakerBg: #165ecc;
$raiseHandBg: #F8AE1A;
$audioLevelBg: #44A5FF;
$connectionIndicatorBg: #165ecc;
$audioLevelShadow: rgba(9, 36, 77, 0.9);
$videoStateIndicatorColor: $defaultColor;
$videoStateIndicatorBackground: $toolbarBackground;
$videoStateIndicatorSize: 40px;
$remoteVideoMenuIconMargin: initial;
/**
* Feedback Modal
@@ -102,7 +92,6 @@ $sidebarWidth: 315px;
* Misc.
*/
$borderRadius: 4px;
$popoverMenuPadding: 13px;
$happySoftwareBackground: transparent;
$desktopAppDragBarHeight: 25px;
$scrollHeight: 7px;
@@ -118,7 +107,6 @@ $toolbarBackgroundZ: 4;
$labelsZ: 5;
$subtitlesZ: 7;
$popoverZ: 8;
$zindex10: 10;
$reloadZ: 20;
$poweredByZ: 100;
$ringingZ: 300;

View File

@@ -43,165 +43,7 @@
.videocontainer {
position: relative;
text-align: center;
&__background {
@include topLeft();
background-color: black;
border-radius: $borderRadius;
width: 100%;
height: 100%;
}
/**
* The toolbar of the video thumbnail.
*/
&__toolbar,
&__toptoolbar {
position: absolute;
left: 0;
pointer-events: none;
z-index: $zindex10;
width: 100%;
box-sizing: border-box; // Includes the padding in the 100% width.
/**
* FIXME (lenny): Disabling pointer-events is a pretty big sin that
* sidesteps the problems. There are z-index wars occurring within
* videocontainer and AtlasKit Tooltips rely on their parent z-indexe
* being higher than whatever they need to appear over. So set a higher
* z-index for the tooltip containers but make any empty space not block
* mouse overs for various mouseover triggers.
*/
pointer-events: none;
* {
pointer-events: auto;
}
.indicator-container {
display: inline-block;
float: left;
pointer-events: all;
}
}
&__toolbar {
bottom: 0;
padding: 0 5px 0 5px;
}
&__toptoolbar {
$toolbarIconMargin: 5px;
top: 0;
padding-bottom: 0;
/**
* Override text-align center as icons need to be left justified.
*/
text-align: left;
/**
* Intentionally use margin on the icon itself as AtlasKit InlineDialog
* positioning depends on the trigger (indicator icon).
*/
.indicator {
margin-left: 5px;
margin-top: $toolbarIconMargin;
}
.indicator-container:nth-child(1) .indicator {
margin-left: $toolbarIconMargin;
}
.indicator-container {
display: inline-block;
vertical-align: top;
.popover-trigger {
display: inline-block;
}
}
.connection-indicator,
.indicator {
position: relative;
font-size: 8px;
text-align: center;
line-height: $thumbnailIndicatorSize;
padding: 0;
@include circle($thumbnailIndicatorSize);
box-sizing: border-box;
z-index: $zindex3;
background: $dominantSpeakerBg;
color: $thumbnailPictogramColor;
border: $thumbnailIndicatorBorder solid $thumbnailPictogramColor;
.indicatoricon {
@include absoluteAligning();
}
.connection {
position: relative;
display: inline-block;
margin: 0 auto;
left: 0;
@include transform(translate(0, -50%));
&_empty,
&_lost
{
color: #8B8B8B;/*#FFFFFF*/
overflow: hidden;
}
&_full
{
@include topLeft();
color: #FFFFFF;/*#15A1ED*/
overflow: hidden;
}
&_ninja
{
font-size: 1.5em;
}
}
.icon-gsm-bars {
cursor: pointer;
font-size: 1em;
}
}
.hide-connection-indicator {
display: none;
}
}
&__hoverOverlay {
background: rgba(0,0,0,.6);
border-radius: $borderRadius;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
visibility: hidden;
z-index: $zindex2;
}
&__participant-name {
color: #fff;
background-color: rgba(0,0,0,.4);
padding: 3px 7px;
border-radius: 3px;
max-width: calc(100% - 32px);
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
height: 16px;
display: inline-block;
text-align: right;
}
overflow: 'hidden';
@media (min-width: 581px) {
&.shift-right {
@@ -288,16 +130,6 @@
z-index: $zindex0;
}
/**
* Positions video thumbnail display name and editor.
*/
#alwaysOnTop .displayname,
.videocontainer .displayname,
.videocontainer .editdisplayname {
font-weight: 100;
color: $participantNameColor;
}
#alwaysOnTop .displayname {
font-size: 15px;
position: inherit;
@@ -307,146 +139,6 @@
margin-top: 10px;
}
/**
* Positions video thumbnail display name editor.
*/
.videocontainer .editdisplayname {
outline: none;
border: none;
background: none;
box-shadow: none;
padding: 0;
}
#localVideoContainer .displayname:hover {
cursor: text;
}
.videocontainer .displayname {
pointer-events: none;
padding: 0 3px 0 3px;
}
.videocontainer .editdisplayname {
height: auto;
}
#localDisplayName {
pointer-events: auto !important;
}
.videocontainer>a.displayname {
display: inline-block;
position: absolute;
color: #FFFFFF;
bottom: 0;
right: 0;
padding: 3px 5px;
font-size: 9pt;
cursor: pointer;
z-index: $zindex2;
}
/**
* Video thumbnail toolbar icon.
*/
.videocontainer .toolbar-icon {
font-size: 8pt;
text-align: center;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
color: #FFFFFF;
width: 12px;
line-height: $thumbnailToolbarHeight;
height: $thumbnailToolbarHeight;
padding: 0;
border: 0;
margin: 0px 5px 0px 0px;
}
/**
* Toolbar icon internal i elements (font icons).
*/
.toolbar-icon>div {
height: $thumbnailToolbarHeight;
display: flex;
flex-direction: column;
justify-content: center;
}
/**
* Toolbar icons positioned on the right.
*/
.moderator-icon {
display: inline-block;
&.right {
float: right;
margin: 0px 0px 0px 5px;
}
.toolbar-icon {
margin: 0;
}
}
.raisehandindicator {
background: $raiseHandBg !important;
}
.connection-indicator {
background: $connectionIndicatorBg;
&.status-high {
background: green;
}
&.status-med {
background: #FFD740;
}
&.status-lost {
background: gray;
}
&.status-low {
background: #BF2117;
}
&.status-other {
background: $connectionIndicatorBg;
}
&.status-disabled {
background: transparent;
border: none
}
}
.local-video-menu-trigger,
.remote-video-menu-trigger,
.localvideomenu,
.remotevideomenu
{
display: inline-block;
position: absolute;
top: 0px;
right: 0;
z-index: $zindex2;
width: 18px;
height: 18px;
color: #FFF;
font-size: 10pt;
margin-right: $remoteVideoMenuIconMargin;
>i{
cursor: hand;
}
}
.local-video-menu-trigger,
.remote-video-menu-trigger {
margin-top: 7px;
}
/**
* Audio indicator on video thumbnails.
*/
@@ -623,74 +315,11 @@
display: none;
}
.display-avatar-with-name {
.avatar-container {
visibility: visible;
}
.displayNameContainer {
visibility: visible;
}
.videocontainer__hoverOverlay {
visibility: visible;
}
video {
visibility: hidden;
}
}
.display-name-on-black {
.avatar-container {
visibility: hidden;
}
.displayNameContainer {
visibility: visible;
}
.videocontainer__hoverOverlay {
visibility: hidden;
}
video {
opacity: 0.2;
visibility: visible;
}
}
.display-video {
.avatar-container {
visibility: hidden;
}
.displayNameContainer {
visibility: hidden;
}
.videocontainer__hoverOverlay {
visibility: hidden;
}
video {
visibility: visible;
}
}
.display-name-on-video {
.avatar-container {
visibility: hidden;
}
.displayNameContainer {
visibility: visible;
}
.videocontainer__hoverOverlay {
visibility: visible;
}
video {
visibility: visible;
}
@@ -701,14 +330,6 @@
visibility: visible;
}
.displayNameContainer {
visibility: hidden;
}
.videocontainer__hoverOverlay {
visibility: hidden;
}
video {
visibility: hidden;
}

View File

@@ -6,37 +6,10 @@
border-radius: $borderRadius;
margin: 0 $thumbnailVideoMargin;
&.videoContainerFocused, &:hover {
&:hover {
cursor: hand;
}
/**
* Focused video thumbnail.
*/
&.videoContainerFocused {
border: $thumbnailVideoBorder solid $videoThumbnailSelected;
box-shadow: inset 0 0 3px $videoThumbnailSelected,
0 0 3px $videoThumbnailSelected;
}
.remotevideomenu > .icon-menu, .localvideomenu > .icon-menu {
display: none;
}
/**
* Hovered video thumbnail.
*/
&:hover:not(.videoContainerFocused):not(.active-speaker) {
cursor: hand;
border: $thumbnailVideoBorder solid $videoThumbnailHovered;
box-shadow: inset 0 0 3px $videoThumbnailHovered,
0 0 3px $videoThumbnailHovered;
.remotevideomenu > .icon-menu, .localvideomenu > .icon-menu {
display: inline-block;
}
}
& > video {
cursor: hand;
border-radius: $borderRadius;

View File

@@ -2,13 +2,6 @@
* CSS styles that are specific to the filmstrip that shows the thumbnail tiles.
*/
.tile-view {
/**
* Add a border around the active speaker to make the thumbnail easier to
* see.
*/
.active-speaker {
box-shadow: 0px 0px 1px 1.5px black, 0px 0px 1.3px 4px $videoThumbnailSelected;
}
.remote-videos {
align-items: center;
@@ -106,19 +99,6 @@
display: block;
margin: 2px;
}
video {
object-fit: contain;
}
/**
* Max-width corresponding to the ASPECT_RATIO_BREAKPOINT from features/filmstrip/constants.
*/
@media only screen and (max-width: 500px) {
video {
object-fit: cover;
}
}
}
}
}
@@ -134,7 +114,3 @@
}
}
}
.indicator-icon-container {
display: inline-block;
}

View File

@@ -35,16 +35,4 @@
#remotePresenceMessage {
display: none !important;
}
/**
* Thumbnail popover menus can overlap other thumbnails. Setting an auto
* z-index will allow AtlasKit InlineDialog's large z-index to be
* respected and thereby display over elements in other thumbnails,
* specifically the various status icons.
*/
.remotevideomenu,
.localvideomenu,
.videocontainer__toptoolbar {
z-index: auto;
}
}

View File

@@ -19,72 +19,6 @@
* Overrides for small videos in vertical filmstrip mode.
*/
.vertical-filmstrip .filmstrip__videos .videocontainer {
/**
* Move status icons to the bottom right of the thumbnail.
*/
.videocontainer__toolbar {
/**
* FIXME: disable pointer to allow any elements moved below to still
* be clickable. The real fix would to make sure those moved elements
* are actually part of the toolbar instead of positioning being faked.
*/
pointer-events: none;
text-align: right;
> div {
pointer-events: none;
}
.right {
float: none;
margin: auto;
}
.toolbar-icon {
pointer-events: all;
}
}
/**
* Apply hardware acceleration to prevent flickering on scroll. The
* selectors are specific to icon wrappers to prevent fixed position dialogs
* and tooltips from getting a new location context due to translate3d.
*/
.connection-indicator,
.local-video-menu-trigger,
.remote-video-menu-trigger,
.indicator-icon-container {
transform: translate3d(0, 0, 0);
}
.indicator-icon-container {
display: inline-block;
}
.indicator-container {
float: none;
}
/**
* Move the remote video menu trigger to the bottom left of the video
* thumbnail.
*/
.localvideomenu,
.remotevideomenu,
.local-video-menu-trigger,
.remote-video-menu-trigger {
bottom: 0;
left: 0;
top: auto;
right: auto;
}
.local-video-menu-trigger,
.remote-video-menu-trigger {
margin-bottom: 3px;
margin-left: $remoteVideoMenuIconMargin;
}
.self-view-mobile-portrait video {
object-fit: contain;
}

View File

@@ -48,7 +48,7 @@
}
.profile-edit-field {
flex: 1;
flex: .5;
}
.settings-sub-pane {
flex: 1;
@@ -65,6 +65,11 @@
text-align: left;
flex: 1;
}
.moderator-settings-wrapper {
padding-top: 20px;
}
.profile-edit-field {
margin-right: 20px;
}

View File

@@ -201,3 +201,7 @@
top: 40%;
left: 45%;
}
.dialog-margin-top{
margin-top: 44px;
}

View File

@@ -75,11 +75,7 @@ $errorColor: #c61600;
$feedbackCancelFontColor: #333;
// Popover colors
$popoverBg: initial;
$popoverFontColor: #ffffff !important;
$popupMenuColor: #ffffff !important;
$popupMenuHoverColor: #ffffff !important;
$popupMenuHoverBackground: rgba(255, 255, 255, 0.1);
$popupSliderColor: #0376da;
// Toolbar

View File

@@ -124,4 +124,5 @@ Component "lobby.jitmeet.example.com" "muc"
muc_room_default_public_jids = true
modules_enabled = {
"muc_rate_limit";
"polls";
}

View File

@@ -32,4 +32,12 @@ denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
syslog

0
fonts.html Normal file
View File

View File

@@ -9,6 +9,7 @@
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link rel="stylesheet" href="css/all.css">
<!--#include virtual="fonts.html"-->
<link rel="manifest" id="manifest-placeholder">
<script>

View File

@@ -26,7 +26,7 @@ var interfaceConfig = {
CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
DEFAULT_BACKGROUND: '#474747',
DEFAULT_BACKGROUND: '#040404',
DEFAULT_LOGO_URL: 'images/watermark.svg',
DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/watermark.svg',

View File

@@ -1,6 +1,9 @@
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '12.0'
workspace 'jitsi-meet'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
install! 'cocoapods', :deterministic_uuids => false
target 'JitsiMeet' do
@@ -17,75 +20,14 @@ target 'JitsiMeetSDK' do
# React Native and its dependencies
#
pod 'FBLazyVector', :path => '../node_modules/react-native/Libraries/FBLazyVector/'
pod 'FBReactNativeSpec', :path => '../node_modules/react-native/Libraries/FBReactNativeSpec/'
pod 'RCTRequired', :path => '../node_modules/react-native/Libraries/RCTRequired/'
pod 'RCTTypeSafety', :path => '../node_modules/react-native/Libraries/TypeSafety/'
pod 'React', :path => '../node_modules/react-native/'
pod 'ReactCommon', :path => '../node_modules/react-native/ReactCommon', :subspecs => [
'turbomodule'
]
pod 'React-Core', :path => '../node_modules/react-native/', :subspecs => [
'CoreModulesHeaders',
'DevSupport',
'RCTWebSocket'
], :modular_headers => true
pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
# React Native plugins
#
pod 'amplitude-react-native', :path => '../node_modules/@amplitude/react-native'
pod 'react-native-background-timer', :path => '../node_modules/react-native-background-timer'
pod 'react-native-calendar-events', :path => '../node_modules/react-native-calendar-events'
pod 'react-native-get-random-values', :path => '../node_modules/react-native-get-random-values'
pod 'react-native-keep-awake', :path => '../node_modules/react-native-keep-awake'
pod 'react-native-netinfo', :path => '../node_modules/@react-native-community/netinfo'
pod 'react-native-performance', :path => '../node_modules/react-native-performance/ios'
pod 'react-native-slider', :path => '../node_modules/@react-native-community/slider'
pod 'react-native-splash-screen', :path => '../node_modules/react-native-splash-screen'
pod 'react-native-video', :path => '../node_modules/react-native-video/react-native-video.podspec'
pod 'react-native-webview', :path => '../node_modules/react-native-webview'
pod 'react-native-webrtc', :path => '../node_modules/react-native-webrtc'
pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-async-storage/async-storage'
pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info'
pod 'RNGoogleSignin', :path => '../node_modules/@react-native-community/google-signin'
pod 'RNSound', :path => '../node_modules/react-native-sound'
pod 'RNSVG', :path => '../node_modules/react-native-svg'
pod 'RNWatch', :path => '../node_modules/react-native-watch-connectivity'
pod 'RNDefaultPreference', :path => '../node_modules/react-native-default-preference'
pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler'
pod 'RNReanimated', :path => '../node_modules/react-native-reanimated'
pod 'RNScreens', :path => '../node_modules/react-native-screens'
pod 'react-native-safe-area-context', :path => '../node_modules/react-native-safe-area-context'
pod 'RNCMaskedView', :path => '../node_modules/@react-native-masked-view/masked-view'
config = use_native_modules!
use_react_native!(:path => config["reactNativePath"])
# Native pod dependencies
#
pod 'CocoaLumberjack', '~>3.5.3'
pod 'ObjectiveDropboxOfficial', '~>6.1.0'
use_native_modules!
end
post_install do |installer|

View File

@@ -1,7 +1,7 @@
PODS:
- Amplitude (8.2.0)
- amplitude-react-native (2.3.3):
- Amplitude (= 8.2.0)
- Amplitude (8.7.1)
- amplitude-react-native (2.7.0):
- Amplitude (= 8.7.1)
- React-Core
- AppAuth (1.4.0):
- AppAuth/Core (= 1.4.0)
@@ -13,14 +13,14 @@ PODS:
- CocoaLumberjack/Core (= 3.5.3)
- CocoaLumberjack/Core (3.5.3)
- DoubleConversion (1.1.6)
- FBLazyVector (0.61.5-jitsi.2)
- FBReactNativeSpec (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.61.5-jitsi.2)
- RCTTypeSafety (= 0.61.5-jitsi.2)
- React-Core (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.2)
- FBLazyVector (0.63.4)
- FBReactNativeSpec (0.63.4):
- Folly (= 2020.01.13.00)
- RCTRequired (= 0.63.4)
- RCTTypeSafety (= 0.63.4)
- React-Core (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- Firebase/Analytics (6.33.0):
- Firebase/Core
- Firebase/Core (6.33.0):
@@ -65,12 +65,12 @@ PODS:
- GoogleUtilities/Environment (~> 6.7)
- GoogleUtilities/UserDefaults (~> 6.7)
- PromisesObjC (~> 1.2)
- Folly (2018.10.22.00):
- Folly (2020.01.13.00):
- boost-for-react-native
- DoubleConversion
- Folly/Default (= 2018.10.22.00)
- Folly/Default (= 2020.01.13.00)
- glog
- Folly/Default (2018.10.22.00):
- Folly/Default (2020.01.13.00):
- boost-for-react-native
- DoubleConversion
- glog
@@ -83,8 +83,8 @@ PODS:
- nanopb (~> 1.30906.0)
- GoogleDataTransport (7.5.1):
- nanopb (~> 1.30906.0)
- GoogleSignIn (5.0.2):
- AppAuth (~> 1.2)
- GoogleSignIn (6.0.2):
- AppAuth (~> 1.4)
- GTMAppAuth (~> 1.0)
- GTMSessionFetcher/Core (~> 1.1)
- GoogleUtilities/AppDelegateSwizzler (6.7.2):
@@ -117,275 +117,289 @@ PODS:
- nanopb/encode (1.30906.0)
- ObjectiveDropboxOfficial (6.1.0)
- PromisesObjC (1.2.12)
- RCTRequired (0.61.5-jitsi.2)
- RCTTypeSafety (0.61.5-jitsi.2):
- FBLazyVector (= 0.61.5-jitsi.2)
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.61.5-jitsi.2)
- React-Core (= 0.61.5-jitsi.2)
- React (0.61.5-jitsi.2):
- React-Core (= 0.61.5-jitsi.2)
- React-Core/DevSupport (= 0.61.5-jitsi.2)
- React-Core/RCTWebSocket (= 0.61.5-jitsi.2)
- React-RCTActionSheet (= 0.61.5-jitsi.2)
- React-RCTAnimation (= 0.61.5-jitsi.2)
- React-RCTBlob (= 0.61.5-jitsi.2)
- React-RCTImage (= 0.61.5-jitsi.2)
- React-RCTLinking (= 0.61.5-jitsi.2)
- React-RCTNetwork (= 0.61.5-jitsi.2)
- React-RCTSettings (= 0.61.5-jitsi.2)
- React-RCTText (= 0.61.5-jitsi.2)
- React-RCTVibration (= 0.61.5-jitsi.2)
- React-Core (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- RCTRequired (0.63.4)
- RCTTypeSafety (0.63.4):
- FBLazyVector (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTRequired (= 0.63.4)
- React-Core (= 0.63.4)
- React (0.63.4):
- React-Core (= 0.63.4)
- React-Core/DevSupport (= 0.63.4)
- React-Core/RCTWebSocket (= 0.63.4)
- React-RCTActionSheet (= 0.63.4)
- React-RCTAnimation (= 0.63.4)
- React-RCTBlob (= 0.63.4)
- React-RCTImage (= 0.63.4)
- React-RCTLinking (= 0.63.4)
- React-RCTNetwork (= 0.63.4)
- React-RCTSettings (= 0.63.4)
- React-RCTText (= 0.63.4)
- React-RCTVibration (= 0.63.4)
- React-callinvoker (0.63.4)
- React-Core (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-Core/Default (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/CoreModulesHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/CoreModulesHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/Default (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/Default (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/DevSupport (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/DevSupport (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default (= 0.61.5-jitsi.2)
- React-Core/RCTWebSocket (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-jsinspector (= 0.61.5-jitsi.2)
- React-Core/Default (= 0.63.4)
- React-Core/RCTWebSocket (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- React-jsinspector (= 0.63.4)
- Yoga
- React-Core/RCTActionSheetHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTActionSheetHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTAnimationHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTAnimationHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTBlobHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTBlobHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTImageHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTImageHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTLinkingHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTLinkingHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTNetworkHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTNetworkHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTSettingsHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTSettingsHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTTextHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTTextHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTVibrationHeaders (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTVibrationHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTWebSocket (0.61.5-jitsi.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTWebSocket (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsiexecutor (= 0.61.5-jitsi.2)
- React-Core/Default (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-CoreModules (0.61.5-jitsi.2):
- FBReactNativeSpec (= 0.61.5-jitsi.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.61.5-jitsi.2)
- React-Core/CoreModulesHeaders (= 0.61.5-jitsi.2)
- React-RCTImage (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.2)
- React-cxxreact (0.61.5-jitsi.2):
- React-CoreModules (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/CoreModulesHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- React-RCTImage (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-cxxreact (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-jsinspector (= 0.61.5-jitsi.2)
- React-jsi (0.61.5-jitsi.2):
- React-callinvoker (= 0.63.4)
- React-jsinspector (= 0.63.4)
- React-jsi (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-jsi/Default (= 0.61.5-jitsi.2)
- React-jsi/Default (0.61.5-jitsi.2):
- React-jsi/Default (= 0.63.4)
- React-jsi/Default (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-jsiexecutor (0.61.5-jitsi.2):
- React-jsiexecutor (0.63.4):
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-jsinspector (0.61.5-jitsi.2)
- react-native-background-timer (2.4.0):
- React
- react-native-calendar-events (2.0.0):
- React
- react-native-get-random-values (1.7.0):
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsinspector (0.63.4)
- react-native-background-timer (2.4.1):
- React-Core
- react-native-get-random-values (1.7.2):
- React-Core
- react-native-keep-awake (4.0.0):
- React
- react-native-netinfo (4.1.5):
- React
- react-native-performance (2.0.0):
- react-native-netinfo (7.1.7):
- React-Core
- react-native-pager-view (5.4.9):
- React-Core
- react-native-performance (2.1.0):
- React-Core
- react-native-safe-area-context (3.3.2):
- React-Core
- react-native-slider (3.0.3):
- react-native-slider (4.1.12):
- React-Core
- react-native-splash-screen (3.3.0):
- React-Core
- react-native-video (5.2.0):
- React-Core
- react-native-video/Video (= 5.2.0)
- react-native-video/Video (5.2.0):
- React-Core
- react-native-webrtc (1.94.1):
- React-Core
- react-native-webview (11.15.1):
- React-Core
- React-RCTActionSheet (0.63.4):
- React-Core/RCTActionSheetHeaders (= 0.63.4)
- React-RCTAnimation (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTAnimationHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTBlob (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- React-Core/RCTBlobHeaders (= 0.63.4)
- React-Core/RCTWebSocket (= 0.63.4)
- React-jsi (= 0.63.4)
- React-RCTNetwork (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTImage (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTImageHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- React-RCTNetwork (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTLinking (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- React-Core/RCTLinkingHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTNetwork (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTNetworkHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTSettings (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTSettingsHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTText (0.63.4):
- React-Core/RCTTextHeaders (= 0.63.4)
- React-RCTVibration (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- React-Core/RCTVibrationHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- ReactCommon/turbomodule/core (0.63.4):
- DoubleConversion
- Folly (= 2020.01.13.00)
- glog
- React-callinvoker (= 0.63.4)
- React-Core (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- RNCalendarEvents (2.2.0):
- React
- react-native-splash-screen (3.2.0):
- React
- react-native-video (5.1.1):
- RNCAsyncStorage (1.15.14):
- React-Core
- react-native-video/Video (= 5.1.1)
- react-native-video/Video (5.1.1):
- React-Core
- react-native-webrtc (1.94.0):
- React-Core
- react-native-webview (11.0.2):
- React-Core
- React-RCTActionSheet (0.61.5-jitsi.2):
- React-Core/RCTActionSheetHeaders (= 0.61.5-jitsi.2)
- React-RCTAnimation (0.61.5-jitsi.2):
- React-Core/RCTAnimationHeaders (= 0.61.5-jitsi.2)
- React-RCTBlob (0.61.5-jitsi.2):
- React-Core/RCTBlobHeaders (= 0.61.5-jitsi.2)
- React-Core/RCTWebSocket (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- React-RCTNetwork (= 0.61.5-jitsi.2)
- React-RCTImage (0.61.5-jitsi.2):
- React-Core/RCTImageHeaders (= 0.61.5-jitsi.2)
- React-RCTNetwork (= 0.61.5-jitsi.2)
- React-RCTLinking (0.61.5-jitsi.2):
- React-Core/RCTLinkingHeaders (= 0.61.5-jitsi.2)
- React-RCTNetwork (0.61.5-jitsi.2):
- React-Core/RCTNetworkHeaders (= 0.61.5-jitsi.2)
- React-RCTSettings (0.61.5-jitsi.2):
- React-Core/RCTSettingsHeaders (= 0.61.5-jitsi.2)
- React-RCTText (0.61.5-jitsi.2):
- React-Core/RCTTextHeaders (= 0.61.5-jitsi.2)
- React-RCTVibration (0.61.5-jitsi.2):
- React-Core/RCTVibrationHeaders (= 0.61.5-jitsi.2)
- ReactCommon/jscallinvoker (0.61.5-jitsi.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule (0.61.5-jitsi.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-Core (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- ReactCommon/jscallinvoker (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule/samples (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule/core (0.61.5-jitsi.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-Core (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- ReactCommon/jscallinvoker (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule/samples (0.61.5-jitsi.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-Core (= 0.61.5-jitsi.2)
- React-cxxreact (= 0.61.5-jitsi.2)
- React-jsi (= 0.61.5-jitsi.2)
- ReactCommon/jscallinvoker (= 0.61.5-jitsi.2)
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.2)
- RNCAsyncStorage (1.15.5):
- RNCClipboard (1.5.1):
- React-Core
- RNCMaskedView (0.2.6):
- React-Core
- RNDefaultPreference (1.4.2):
- React
- RNDeviceInfo (8.0.0):
- RNDefaultPreference (1.4.3):
- React-Core
- RNGestureHandler (1.10.3):
- RNDeviceInfo (8.4.8):
- React-Core
- RNGestureHandler (2.1.0):
- React-Core
- RNGoogleSignin (7.0.4):
- GoogleSignIn (~> 6.0.0)
- React-Core
- RNGoogleSignin (3.0.1):
- GoogleSignIn (~> 5.0.0)
- React
- RNReanimated (1.13.3):
- React-Core
- RNScreens (2.18.1):
- RNScreens (3.10.1):
- React-Core
- React-RCTImage
- RNSound (0.11.1):
- React-Core
- RNSound/Core (= 0.11.1)
- RNSound/Core (0.11.1):
- React-Core
- RNSound (0.11.0):
- React
- RNSound/Core (= 0.11.0)
- RNSound/Core (0.11.0):
- React
- RNSVG (12.1.0):
- React
- RNWatch (0.4.3):
- RNWatch (1.0.4):
- React
- Yoga (1.14.0)
@@ -393,18 +407,19 @@ DEPENDENCIES:
- "amplitude-react-native (from `../node_modules/@amplitude/react-native`)"
- CocoaLumberjack (~> 3.5.3)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector/`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec/`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
- Firebase/Analytics (~> 6.33.0)
- Firebase/Crashlytics (~> 6.33.0)
- Firebase/DynamicLinks (~> 6.33.0)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- ObjectiveDropboxOfficial (~> 6.1.0)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired/`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety/`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
- React-Core/CoreModulesHeaders (from `../node_modules/react-native/`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
@@ -413,15 +428,15 @@ DEPENDENCIES:
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
- react-native-calendar-events (from `../node_modules/react-native-calendar-events`)
- react-native-get-random-values (from `../node_modules/react-native-get-random-values`)
- react-native-keep-awake (from `../node_modules/react-native-keep-awake`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
- react-native-pager-view (from `../node_modules/react-native-pager-view`)
- react-native-performance (from `../node_modules/react-native-performance/ios`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
- react-native-splash-screen (from `../node_modules/react-native-splash-screen`)
- react-native-video (from `../node_modules/react-native-video/react-native-video.podspec`)
- react-native-video (from `../node_modules/react-native-video`)
- react-native-webrtc (from `../node_modules/react-native-webrtc`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
@@ -433,13 +448,15 @@ DEPENDENCIES:
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- ReactCommon/turbomodule (from `../node_modules/react-native/ReactCommon`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- RNCalendarEvents (from `../node_modules/react-native-calendar-events`)
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
- "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)"
- RNDefaultPreference (from `../node_modules/react-native-default-preference`)
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- "RNGoogleSignin (from `../node_modules/@react-native-community/google-signin`)"
- "RNGoogleSignin (from `../node_modules/@react-native-google-signin/google-signin`)"
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- RNSound (from `../node_modules/react-native-sound`)
@@ -476,19 +493,21 @@ EXTERNAL SOURCES:
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector:
:path: "../node_modules/react-native/Libraries/FBLazyVector/"
:path: "../node_modules/react-native/Libraries/FBLazyVector"
FBReactNativeSpec:
:path: "../node_modules/react-native/Libraries/FBReactNativeSpec/"
:path: "../node_modules/react-native/Libraries/FBReactNativeSpec"
Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
RCTRequired:
:path: "../node_modules/react-native/Libraries/RCTRequired/"
:path: "../node_modules/react-native/Libraries/RCTRequired"
RCTTypeSafety:
:path: "../node_modules/react-native/Libraries/TypeSafety/"
:path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
React-callinvoker:
:path: "../node_modules/react-native/ReactCommon/callinvoker"
React-Core:
:path: "../node_modules/react-native/"
React-CoreModules:
@@ -503,14 +522,14 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/jsinspector"
react-native-background-timer:
:path: "../node_modules/react-native-background-timer"
react-native-calendar-events:
:path: "../node_modules/react-native-calendar-events"
react-native-get-random-values:
:path: "../node_modules/react-native-get-random-values"
react-native-keep-awake:
:path: "../node_modules/react-native-keep-awake"
react-native-netinfo:
:path: "../node_modules/@react-native-community/netinfo"
react-native-pager-view:
:path: "../node_modules/react-native-pager-view"
react-native-performance:
:path: "../node_modules/react-native-performance/ios"
react-native-safe-area-context:
@@ -520,7 +539,7 @@ EXTERNAL SOURCES:
react-native-splash-screen:
:path: "../node_modules/react-native-splash-screen"
react-native-video:
:path: "../node_modules/react-native-video/react-native-video.podspec"
:path: "../node_modules/react-native-video"
react-native-webrtc:
:path: "../node_modules/react-native-webrtc"
react-native-webview:
@@ -545,8 +564,12 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/Vibration"
ReactCommon:
:path: "../node_modules/react-native/ReactCommon"
RNCalendarEvents:
:path: "../node_modules/react-native-calendar-events"
RNCAsyncStorage:
:path: "../node_modules/@react-native-async-storage/async-storage"
RNCClipboard:
:path: "../node_modules/@react-native-community/clipboard"
RNCMaskedView:
:path: "../node_modules/@react-native-masked-view/masked-view"
RNDefaultPreference:
@@ -556,7 +579,7 @@ EXTERNAL SOURCES:
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
RNGoogleSignin:
:path: "../node_modules/@react-native-community/google-signin"
:path: "../node_modules/@react-native-google-signin/google-signin"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
@@ -571,14 +594,14 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
Amplitude: 263118b9e691e73a1c864b05bb08a3aff3636d16
amplitude-react-native: 9369759dc6d01590aeb6261f714d53beaebc7e6f
Amplitude: 834c7332dfb9640a751e21c13efb22a07c0c12d4
amplitude-react-native: 0ed8cab759aafaa94961b82122bf56297da607ad
AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
FBLazyVector: ca7f56c8ff6cd8590f7a673d7903b06019805581
FBReactNativeSpec: 8136c3cf27de2bb310a69cffbb423c5643f5c1c4
DoubleConversion: cde416483dac037923206447da6e1454df403714
FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e
Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5
FirebaseAnalytics: 5dd088bd2e67bb9d13dbf792d1164ceaf3052193
FirebaseCore: d889d9e12535b7f36ac8bfbf1713a0836a3012cd
@@ -586,61 +609,64 @@ SPEC CHECKSUMS:
FirebaseCrashlytics: 1a747c9cc084a24dc6d9511c991db1cd078154eb
FirebaseDynamicLinks: 6eac37d86910382eafb6315d952cc44c9e176094
FirebaseInstallations: 466c7b4d1f58fe16707693091da253726a731ed2
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
GoogleAppMeasurement: 966e88df9d19c15715137bb2ddaf52373f111436
GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833
GoogleSignIn: 7137d297ddc022a7e0aa4619c86d72c909fa7213
GoogleSignIn: fd381840dbe7c1137aa6dc30849a5c3e070c034a
GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3
GTMAppAuth: ad5c2b70b9a8689e1a04033c9369c4915bfcbe89
GTMSessionFetcher: 43748f93435c2aa068b1cbe39655aaf600652e91
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
ObjectiveDropboxOfficial: b4765572e334d6fc6214b43a7595510324bbbbaa
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
RCTRequired: a686731276578c125dff205f08b6ec9cee6ede32
RCTTypeSafety: 88e5500e801c00d16a3d1895e3470d13beed6584
React: 8b2bcf6a93846e47a7a365a54ec6edeb78b37701
React-Core: 3fbdbc87c18c4742b735ff9a0c02fa38c87e0fba
React-CoreModules: f6f8a8212aec52a21251c0af58bdb037b57c70b3
React-cxxreact: c6ad34143db06a5c3cb0e8e169c775475287ac9c
React-jsi: ddb471a56185e4007835a1bba0882ecb5ce3dc0e
React-jsiexecutor: 67106691c60030ec888d7cbbc4f48a3168e27a02
React-jsinspector: 92ceee6c66dc19886289b52436ade7e020b89602
react-native-background-timer: 029c606b3fd6dd476b153e177c518b6ade4c169f
react-native-calendar-events: 82dc6c915653a1a8a266e43fdbbfdb3b1022ca99
react-native-get-random-values: 237bffb1c7e05fb142092681531810a29ba53015
RCTRequired: 082f10cd3f905d6c124597fd1c14f6f2655ff65e
RCTTypeSafety: 8c9c544ecbf20337d069e4ae7fd9a377aadf504b
React: b0a957a2c44da4113b0c4c9853d8387f8e64e615
React-callinvoker: c3f44dd3cb195b6aa46621fff95ded79d59043fe
React-Core: d3b2a1ac9a2c13c3bcde712d9281fc1c8a5b315b
React-CoreModules: 0581ff36cb797da0943d424f69e7098e43e9be60
React-cxxreact: c1480d4fda5720086c90df537ee7d285d4c57ac3
React-jsi: a0418934cf48f25b485631deb27c64dc40fb4c31
React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949
React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
react-native-netinfo: 0e563248a4b9a99c33ec29bd03c2d50767db22a6
react-native-performance: 6bd6cfac80594775fb782405fceaaf206becf53b
react-native-netinfo: 27f287f2d191693f3b9d01a4273137fcf91c3b5d
react-native-pager-view: 3ee7d4c7697fb3ef788346e834a60cca97ed8540
react-native-performance: f4b6604a9d5a8a7407e34a82fab6c641d9a3ec12
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
react-native-slider: e99fc201cefe81270fc9d81714a7a0f5e566b168
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-video: 0bb76b6d6b77da3009611586c7dbf817b947f30e
react-native-webrtc: e22646adc86f2009328b21eb0e40ca404c77258c
react-native-webview: dfd7202ff115c44d3ea401c2f36122fb3ac79f07
React-RCTActionSheet: bcbc311dc3b47bc8efb2737ff0940239a45789a9
React-RCTAnimation: 65f61080ce632f6dea23d52e354ffac9948396c6
React-RCTBlob: 70d88f7b68b5c44953cdb286ac2e36a7a509a97e
React-RCTImage: e0d25b620e42de91ed791ef129e2d3a0df1eb5ab
React-RCTLinking: bc2287cfd9e56403ecea5dafdbdac8c57fa1ac36
React-RCTNetwork: cd8ae8fc787c02ed5152fe9cbf7521ee70c1bce7
React-RCTSettings: f6667271ccd8876a934134b73002b5a2714e1525
React-RCTText: 4f1b99f228278d2a5e9008eced8dc9c974c4a270
React-RCTVibration: c1041024893fdfdb8371e7c720c437751b711676
ReactCommon: 18014e1d98dbeb9141e935cfe35fc93bd511ffb6
RNCAsyncStorage: 56a3355a10b5d660c48c6e37325ac85ebfd09885
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
react-native-video: a4c2635d0802f983594b7057e1bce8f442f0ad28
react-native-webrtc: 2f20515f3ebb9dbf1f2aad638cc7573396cf948f
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0
React-RCTImage: c1b1f2d3f43a4a528c8946d6092384b5c880d2f0
React-RCTLinking: 35ae4ab9dc0410d1fcbdce4d7623194a27214fb2
React-RCTNetwork: 29ec2696f8d8cfff7331fac83d3e893c95ef43ae
React-RCTSettings: 60f0691bba2074ef394f95d4c2265ec284e0a46a
React-RCTText: 5c51df3f08cb9dedc6e790161195d12bac06101c
React-RCTVibration: ae4f914cfe8de7d4de95ae1ea6cc8f6315d73d9d
ReactCommon: 73d79c7039f473b76db6ff7c6b159c478acbbb3b
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd
RNDefaultPreference: 1f8133ec0bc0f9453cdada578564ba1ef551fb44
RNDeviceInfo: 87d2d175c760f6bcf58acd036f887e8b2392802c
RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
RNGoogleSignin: 39336070b35fc4cea6a98cf111e00480317be0ae
RNDefaultPreference: 326860d42a681bfd7338c8f6d061cf58745bd860
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
RNGoogleSignin: c4381751eefd73c552b923ba347a9bfc6f18771c
RNReanimated: 514a11da3a2bcc6c3dfd9de32b38e2b9bf101926
RNScreens: f7ad633b2e0190b77b6a7aab7f914fad6f198d8d
RNSound: da030221e6ac7e8290c6b43f2b5f2133a8e225b0
RNScreens: 522705f2e5c9d27efb17f24aceb2bf8335bc7b8e
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
RNSVG: ce9d996113475209013317e48b05c21ee988d42e
RNWatch: a5320c959c75e72845c07985f3e935e58998f1d3
Yoga: 96b469c5e81ff51b917b92e8c3390642d4ded30c
RNWatch: 99637948ec9b5c9ec5a41920642594ad5ba07e80
Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
PODFILE CHECKSUM: 836d4804218c0608e1326471ec83fe31cfa9c86d
PODFILE CHECKSUM: e54f2f2e86709ccebbf8673ba9df71589886c81d
COCOAPODS: 1.11.2

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>21.5.0</string>
<string>22.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSExtension</key>

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>21.5.0</string>
<string>22.0.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>21.5.0</string>
<string>22.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>UISupportedInterfaceOrientations</key>

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleShortVersionString</key>
<string>21.5.0</string>
<string>22.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CLKComplicationPrincipalClass</key>

View File

@@ -407,13 +407,15 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK-resources.sh",
"${PODS_ROOT}/Amplitude/Sources/Amplitude/Resources/ComodoRsaDomainValidationCA.der",
"${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle",
"${PODS_ROOT}/Amplitude/Sources/Resources/ComodoRsaDomainValidationCA.der",
"${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaDomainValidationCA.der",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;

View File

@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>4.0.0</string>
<string>5.0.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>

View File

@@ -11,33 +11,42 @@
"enGB": "Anglès (Regne Unit)",
"eo": "Esperanto",
"es": "Espanyol",
"esUS": "Espanyol (Amèrica Llatina)",
"esUS": "Espanyol (Amèrica llatina)",
"et": "Estonià",
"eu": "Èuscar",
"eu": "Basc",
"fi": "Finès",
"fr": "Francès",
"frCA": "Francès (Canadà)",
"he": "Hebreu",
"mr": "Marathi",
"hi": "Hindi",
"mr":"Marathi",
"hr": "Croat",
"hu": "Hongarès",
"hy": "Armeni",
"id": "Indonesi",
"it": "Italià",
"ja": "Japonès",
"kab": "Cabilenc",
"ko": "Coreà",
"lt": "Lituà",
"ml": "Malaiàlam",
"lv": "Letó",
"nl": "Neerlandès",
"oc": "Occità",
"fa": "Persa",
"pl": "Polonès",
"pt": "Portuguès",
"ptBR": "Portuguès (Brasil)",
"ru": "Rus",
"ro": "Romanès",
"sc": "Sard",
"sk": "Eslovac",
"sl": "Eslovè",
"sr": "Serbi",
"sq": "Albanès",
"sv": "Suec",
"th": "Tai",
"te": "Telugu",
"th": "tailandès",
"tr": "Turc",
"uk": "Ucraïnès",
"vi": "Vietnamita",

View File

@@ -1,33 +1,55 @@
{
"en": "angielski",
"af": "afrykanerski",
"af": "Afrikaans",
"ar": "arabski",
"bg": "bułgarski",
"ca": "kataloński",
"cs": "czeski",
"da": "duński",
"de": "niemiecki",
"el": "grecki",
"enGB": "angielski (Zjednoczone Królestwo)",
"enGB": "Angielski (Zjednoczone Królestwo)",
"eo": "esperanto",
"es": "hiszpański",
"esUS": "hiszpański (Ameryka Łacińska)",
"et": "estoński",
"eu": "baskijski",
"fi": "fiński",
"fr": "francuski",
"frCA": "francuski (kanadyjski)",
"he": "hebrajski",
"hi": "hindi",
"mr":"Marathi",
"hr": "chorwacki",
"hu": "węgierski",
"hy": "ormiański",
"id": "indonezyjski",
"it": "włoski",
"ja": "japoński",
"kab": "Kabyle",
"ko": "koreański",
"lt": "litewski",
"ml": "malajalam",
"lv": "łotewski",
"nl": "holenderski",
"oc": "oksytański",
"oc": "prowansalski",
"fa": "perski",
"pl": "polski",
"ptBR": "portugalski (brazylijski)",
"pt": "portugalski",
"ptBR": "portugalski (Brazylia)",
"ru": "rosyjski",
"ro": "rumuński",
"sc": "sardyński",
"sk": "słowacki",
"sl": "słoweński",
"sr": "serbski",
"sq": "albański",
"sv": "szwedzki",
"te": "telugu",
"th": "tajski",
"tr": "turecki",
"uk": "ukraiński",
"vi": "wietnamski",
"zhCN": "chiński (Chiny)",
"zhTW": "chiński (Tajwan)"
}
}

View File

@@ -1,32 +1,54 @@
{
"en": "Inglês",
"af": "Africâner",
"af": "Africânder",
"ar": "Árabe",
"bg": "Búlgaro",
"ca": "Catalão",
"cs": "Checo",
"da": "Dinamarquês",
"de": "Alemão",
"el": "Grego",
"enGB": "Inglês (Reino Unido)",
"eo": "Esperanto",
"es": "Espanhol",
"esUS": "Espanhol (América Latina)",
"et": "Estónio",
"eu": "Basco",
"fi": "Finlandês",
"fr": "Francês",
"frCA": "Francês (Canadá)",
"he": "Hebraico",
"hi": "Hindu",
"mr":"Marata",
"hr": "Croata",
"hu": "Húngaro",
"hy": "Armênio",
"hy": "Arménio",
"id": "Indonésio",
"it": "Italiano",
"ja": "Japonês",
"kab": "Cabila",
"ko": "Coreano",
"lt": "Lituano",
"ml": "Malaio",
"lv": "Letão",
"nl": "Holandês",
"oc": "Occitano",
"pl": "Polonês",
"fa": "Persa",
"pl": "Polaco",
"pt": "Português",
"ptBR": "Português (Brasil)",
"ru": "Russo",
"ro": "Romeno",
"sc": "Sardo",
"sk": "Eslovaco",
"sl": "Esloveno",
"sr": "Sérvio",
"sq": "Albanês",
"sv": "Sueco",
"te": "Telugu",
"th": "Tailandês",
"tr": "Turco",
"uk": "Ucraniano",
"vi": "Vietnamita",
"zhCN": "Chinês (China)",
"zhTW": "Chinês (Taiwan)"

View File

@@ -39,6 +39,9 @@
"audioOnly": {
"audioOnly": "معدل تبادل البيانات منخفض"
},
"blankPage": {
"meetingEnded": "انتهى الاجتماع."
},
"breakoutRooms": {
"defaultName": "غرفة الاجتماعات الفرعية رقم {{index}}",
"mainRoom": "الغرفة الرئيسية",
@@ -51,6 +54,11 @@
"more": "أكثر",
"remove": "إزالة",
"sendToBreakoutRoom": "أرسل المشارك إلى:"
},
"notifications": {
"joinedTitle": "غرف جانبية",
"joined": " الغرفة الجانبيةالانضمام إلى {{index}}",
"joinedMainRoom": "الانضمام للغرفة الرئيسية"
}
},
"calendarSync": {
@@ -172,10 +180,11 @@
"joinInApp": "انضم للاجتماع عبر تطبيق الجوال",
"launchWebButton": "افتح تطبيق الويب",
"title": "قيد عقد اجتماعك في {{app}}...",
"tryAgainButton": "جرب مرة أخرى في تطبيق الحاسوب"
"tryAgainButton": "جرب مرة أخرى في تطبيق الحاسوب",
"unsupportedBrowser": "يبدو أنك تستخدم متصفحًا لا ندعمه."
},
"defaultLink": "{{url}} مثلًا",
"defaultNickname": "محمد عمر مثلًا",
"defaultNickname": "محمد علي مثلًا",
"deviceError": {
"cameraError": "فشل الوصول إلى كاميرتك",
"cameraPermission": "خطأ في تحصيل إذن استخدام كاميرتك",
@@ -410,6 +419,7 @@
"desktopShareError": "تعذر إنشاء مشاركة سطح المكتب",
"desktopShare": "مشاركة سطح المكتب",
"webAssemblyWarning": "WebAssembly غير مدعوم",
"webAssemblyWarningDescription": "تم تعطيل WebAssembly أو عدم دعمه بواسطة هذا المستعرض",
"backgroundEffectError": "فشل تطبيق تأثير الخلفية."
},
"feedback": {
@@ -569,10 +579,14 @@
"notify": {
"allowAction": "يسمح",
"allowedUnmute": "يمكنك إعادة صوت الميكروفون و بدء تشغيل الكاميرا أو مشاركة شاشتك.",
"audioUnmuteBlockedTitle": "تم حظر إعادة صوت الميكروفون!",
"audioUnmuteBlockedDescription": "تم حظر عملية إلغاء كتم صوت الميكروفون مؤقتًا بسبب قيود النظام.",
"chatMessages": "رسائل الدردشة",
"connectedOneMember": "انضم {{name}} للاجتماع",
"connectedThreePlusMembers": "انضم {{name}} وعدد {{count}} غيره إلى الاجتماع",
"connectedTwoMembers": "انضم {{first}} و {{second}} إلى الاجتماع",
"disconnected": "انقطع الاتصال",
"displayNotifications": "عرض الإخطارات لـ",
"focus": "التركيز على المؤتمر",
"focusFail": "إنَّ {{component}} غير متاح. ستعاد المحاولة مرة أخرى خلال {{ms}} ثانية.",
"hostAskedUnmute": "The moderator would like you to speak",
@@ -580,6 +594,9 @@
"invitedThreePlusMembers": "دُعِي {{name}} وعدد {{count}} آخرين",
"invitedTwoMembers": "دُعِي {{first}} و {{second}}",
"kickParticipant": "طرد {{kicked}} المشارك {{kicker}}",
"leftOneMember": "{{name}} غادر الاجتماع",
"leftThreePlusMembers": "غادر {{name}} والعديد من الأشخاص الآخرين الاجتماع",
"leftTwoMembers": "غادر {{first}} و {{second}} الاجتماع",
"me": "أنا",
"moderator": "مُنحَت صلاحية رئيس الجلسة!",
"muted": "بدأ المحادثة مكتوب الصوت.",
@@ -591,8 +608,10 @@
"passwordRemovedRemotely": "أزال أحد المشاركين {{participantDisplayName}}",
"passwordSetRemotely": "ضبط أحد المشاركين $t(lockRoomPasswordUppercase)",
"raisedHand": "يريد {{name}} التحدث",
"raisedHands": "{{participantName}} و {{raisedHands}}المزيد من الناس",
"screenShareNoAudio": "لم يتم تحديد مربع مشاركة الصوت في شاشة تحديد النافذة.",
"screenShareNoAudioTitle": "تعذرت مشاركة صوت النظام!",
"selfViewTitle": "يمكنك دائمًا إلغاء إخفاء العرض الذاتي من الإعدادات",
"somebody": "شخص ما",
"startSilentTitle": "انضممت دون مخرج للصوت!",
"startSilentDescription": "أنضم مجدَّدًا للاجتماع لتفعيل الصوت",
@@ -619,7 +638,10 @@
"moderationToggleDescription": "من {{participantDisplayName}}",
"raiseHandAction": "رفع اليد",
"reactionSounds": "تعطيل الأصوات",
"groupTitle": "إشعارات"
"reactionSoundsForAll": "تعطيل الأصوات للجميع",
"groupTitle": "إشعارات",
"videoUnmuteBlockedTitle": "تم حظر إعادة الكاميرا!",
"videoUnmuteBlockedDescription": "تم حظر عملية إلغاء كتم الكاميرا مؤقتًا بسبب قيود النظام."
},
"participantsPane": {
"close": "غلق",
@@ -644,7 +666,8 @@
"stopEveryonesVideo": "أوقف فيديو الجميع",
"stopVideo": "أوقف الفيديو",
"unblockEveryoneMicCamera": "قم بإلغاء حظر ميكروفون وكاميرا الجميع",
"videoModeration": "ابدأ الفيديو الخاص بهم"
"videoModeration": "ابدأ الفيديو الخاص بهم",
"moreModerationControls": "المزيد من ضوابط الاشراف"
},
"search": "بحث"
},
@@ -803,8 +826,8 @@
"security": {
"about": "يمكنك إضافة $t(lockRoomPassword) إلى الاجتماع. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى الاجتماع.",
"aboutReadOnly": "المشاركون بصفة رئيس الجلسة يمكنهم إضافة $t(lockRoomPassword) إلى الاجتماع. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى الاجتماع.",
"insecureRoomNameWarning": "اسم الغرفة غير آمن، فقد ينضم عبره مشاركون غرباء إلى الاجتماع. ننصحك بتأمين الاجتماع عبر وسائل الحماية التي يوفرها زر الحماية.",
"securityOptions": "خيارات الحماية"
"header": "خيارات الأمان",
"insecureRoomNameWarning": "اسم الغرفة غير آمن، فقد ينضم عبره مشاركون غرباء إلى الاجتماع. ننصحك بتأمين الاجتماع عبر وسائل الحماية التي يوفرها زر الحماية."
},
"settings": {
"calendar": {
@@ -836,9 +859,11 @@
"selectAudioOutput": "خرج الصوت",
"selectCamera": "الكاميرا",
"selectMic": "المجهار (المايكروفون)",
"selfView": "عرض ذاتي",
"sounds": "اصوات",
"speakers": "المذياع (مكبر الصوت)",
"startAudioMuted": "بدء الجميع مكتومي الصوت",
"startReactionsMuted": "كتم رد فعل الصوت للجميع",
"startVideoMuted": "بدء الجميع دون فيديو",
"talkWhileMuted": "تحدث أثناء كتم الصوت",
"title": "الإعدادات"
@@ -871,20 +896,20 @@
},
"speaker": "المتحدث",
"speakerStats": {
"search": حث",
"angry": "غاضب",
"disgusted": "مشمئز",
"fearful": "خائف",
"happy": "سعيد",
"hours": "{{count}}س",
"minutes": "{{count}}د",
"name": "الاسم",
"seconds": "{{count}}ثا",
"speakerStats": "حالة المتحدث",
"speakerTime": "وقت المتحدث",
"happy": "سعيد",
"neutral": "حيادي",
"sad": "حزين",
"surprised": "مندهش",
"angry": "غاضب",
"fearful": "خائف",
"disgusted": "مشمئز"
"search": "بحث",
"seconds": "{{count}}ثا",
"speakerTime": "وقت المتحدث",
"speakerStats": "حالة المتحدث",
"surprised": "مندهش"
},
"startupoverlay": {
"policyText": " ",
@@ -927,8 +952,8 @@
"mute": "اظهِر/اخفِ كتم الصوت",
"muteEveryone": "كتم الجميع",
"muteEveryoneElse": "كتم صوت الآخرين",
"muteEveryonesVideo": "تعطيل كاميرا الجميع",
"muteEveryoneElsesVideo": "تعطيل كاميرا الآخرين",
"muteEveryonesVideoStream": "وقّف فيديو الجميع",
"muteEveryoneElsesVideoStream": "وقّف فيديو أي شخص آخر",
"participants": "مشاركون",
"pip": "استعمل/اخرج من وضع صورة-في-صورة",
"privateMessage": "أرسل رسالة خاصة",
@@ -1104,6 +1129,7 @@
"domuteVideoOfOthers": "تعطيل الكاميرا للآخرين",
"flip": "قلب",
"grantModerator": "امنح صلاحيات رئيس الجلسة",
"hideSelfView": "إخفاء المنظر الذاتي",
"kick": "طرد خارجًا",
"moderator": "رئيس الجلسة",
"mute": "المشارك مكتوم الصوت",
@@ -1155,7 +1181,7 @@
"logo": {
"calendar": "شعار التقويم",
"microsoftLogo": "شعار مايكروسوفت",
"logoDeepLinking": "شعار jitsi",
"logoDeepLinking": "شعار جيتسي",
"desktopPreviewThumbnail": "صورة مصغرة لمعاينة سطح المكتب",
"googleLogo": "شعار كوكل",
"policyLogo": "شعار السياسة"

File diff suppressed because it is too large Load Diff

View File

@@ -54,6 +54,11 @@
"more": "Mehr",
"remove": "Entfernen",
"sendToBreakoutRoom": "Anwesende in Breakout-Raum verschieben:"
},
"notifications": {
"joinedTitle": "Breakout-Räume",
"joined": "Breakout-Raum \"{{name}}\" betreten",
"joinedMainRoom": "Hauptraum betreten"
}
},
"calendarSync": {
@@ -175,7 +180,8 @@
"joinInApp": "Mit der App am Meeting teilnehmen",
"launchWebButton": "Im Web öffnen",
"title": "Die Konferenz wird in {{app}} geöffnet …",
"tryAgainButton": "Erneut mit der nativen Applikation versuchen"
"tryAgainButton": "Erneut mit der nativen Applikation versuchen",
"unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird."
},
"defaultLink": "Bsp.: {{url}}",
"defaultNickname": "Z. B. Jane Pink",
@@ -413,7 +419,8 @@
"desktopShareError": "Desktop konnte nicht freigegeben werden",
"desktopShare": "Desktopfreigabe",
"webAssemblyWarning": "WebAssembly wird nicht unterstützt",
"backgroundEffectError": "Failed to apply background effect."
"webAssemblyWarningDescription": "WebAssembly ist deaktiviert oder wird in diesem Browser nicht unterstützt",
"backgroundEffectError": "Hintergrund konnte nicht aktiviert werden."
},
"feedback": {
"average": "Durchschnittlich",
@@ -574,10 +581,12 @@
"allowedUnmute": "Sie können die Stummschaltung aufheben, Ihre Kamera einschalten oder Ihren Bildschirm teilen.",
"audioUnmuteBlockedTitle": "Stummschaltung kann nicht aufgehoben werden!",
"audioUnmuteBlockedDescription": "Díe Stummschaltung kann aus Überlastungsschutzgründen temporär nicht aufgehoben werden.",
"chatMessages": "Chatnachrichten",
"connectedOneMember": "{{name}} nimmt am Meeting teil",
"connectedThreePlusMembers": "{{name}} und {{count}} andere Personen nehmen am Meeting teil",
"connectedTwoMembers": "{{first}} und {{second}} nehmen am Meeting teil",
"disconnected": "getrennt",
"displayNotifications": "Benachrichtigungen anzeigen für",
"focus": "Konferenzleitung",
"focusFail": "{{component}} ist im Moment nicht verfügbar wiederholen in {{ms}} Sekunden",
"hostAskedUnmute": "Die Moderation bittet Sie, das Mikrofon zu aktivieren",
@@ -585,6 +594,9 @@
"invitedThreePlusMembers": "{{name}} und {{count}} andere wurden eingeladen",
"invitedTwoMembers": "{{first}} und {{second}} wurden eingeladen",
"kickParticipant": "{{kicked}} wurde von {{kicker}} ausgewiesen",
"leftOneMember": "{{name}} hat die Konferenz verlassen",
"leftThreePlusMembers": "{{name}} und Weitere haben die Konferenz verlassen",
"leftTwoMembers": "{{first}} und {{second}} haben die Konferenz verlassen",
"me": "Ich",
"moderator": "Moderationsrechte vergeben!",
"muted": "Der Konferenz wurde stumm beigetreten.",
@@ -596,8 +608,10 @@
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) von einer anderen Person entfernt",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) von einer anderen Person gesetzt",
"raisedHand": "{{name}} möchte sprechen.",
"raisedHands": "{{participantName}} und {{raisedHands}} weitere möchten sprechen",
"screenShareNoAudio": "Die Option \"Audio freigeben\" wurde bei der Auswahl des Fensters nicht ausgewählt.",
"screenShareNoAudioTitle": "Share audio was not checked",
"selfViewTitle": "Sie können die eigene Ansicht immer in den Einstellungen reaktivieren",
"somebody": "Jemand",
"startSilentTitle": "Sie sind ohne Audioausgabe beigetreten!",
"startSilentDescription": "Treten Sie dem Meeting noch einmal bei, um Ihr Audio zu aktivieren",
@@ -624,9 +638,10 @@
"moderationToggleDescription": "von {{participantDisplayName}}",
"raiseHandAction": "Melden",
"reactionSounds": "Interaktionstöne deaktivieren",
"reactionSoundsForAll": "Interaktionstöne für alle deaktivieren",
"groupTitle": "Benachrichtigungen",
"videoUnmuteBlockedTitle": "Kamera kann nicht aktiviert werden!",
"videoUnmuteBlockedDescription": "Die Kamera kann aus Überlastungsschutzgründen temporär nicht eingeschaltet werden."
"videoUnmuteBlockedTitle": "Kamera und Bildschirmfreigabe kann nicht aktiviert werden!",
"videoUnmuteBlockedDescription": "Die Kamera und Bildschirmfreigabe kann aus Überlastungsschutzgründen temporär nicht eingeschaltet werden."
},
"participantsPane": {
"close": "Schließen",
@@ -651,7 +666,8 @@
"stopEveryonesVideo": "Alle Kameras ausschalten",
"stopVideo": "Kamera ausschalten",
"unblockEveryoneMicCamera": "Kamera und Mikrofon von allen entsperren",
"videoModeration": "Kamera einschalten"
"videoModeration": "Kamera einschalten",
"moreModerationControls": "Weitere Moderationsoptionen"
},
"search": "Suche Anwesende"
},
@@ -768,6 +784,7 @@
"title": "Profil"
},
"raisedHand": "Ich möchte sprechen",
"raisedHandsLabel": "Anzahl gehobener Hände",
"recording": {
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <3>{{app}}</3>.",
@@ -810,8 +827,8 @@
"security": {
"about": "Sie können Ihre Konferenz mit einem Passwort sichern. Teilnehmer müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.",
"aboutReadOnly": "Mit Moderationsrechten kann die Konferenz mit einem Passwort gesichert werden. Personen müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.",
"insecureRoomNameWarning": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten",
"securityOptions": "Sicherheitsoptionen"
"header": "Sicherheitsoptionen",
"insecureRoomNameWarning": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten"
},
"settings": {
"calendar": {
@@ -843,9 +860,11 @@
"selectAudioOutput": "Audioausgabe",
"selectCamera": "Kamera",
"selectMic": "Mikrofon",
"selfView": "Eigene Ansicht",
"sounds": "Hinweistöne",
"speakers": "Lautsprecher",
"startAudioMuted": "Alle Personen treten stummgeschaltet bei",
"startReactionsMuted": "Interaktionstöne für alle deaktivieren",
"startVideoMuted": "Alle Personen treten ohne Video bei",
"talkWhileMuted": "Wenn bei Stummschaltung gesprochen wird",
"title": "Einstellungen"
@@ -878,20 +897,20 @@
},
"speaker": "Sprecher/-in",
"speakerStats": {
"search": "Suche",
"angry": "Sauer",
"disgusted": "Angeekelt",
"fearful": "Ängstlich",
"happy": "Fröhlich",
"hours": "{{count}} Std. ",
"minutes": "{{count}} Min. ",
"name": "Name",
"seconds": "{{count}} Sek.",
"speakerStats": "Sprechstatistik",
"speakerTime": "Sprechzeit",
"happy": "Fröhlich",
"neutral": "Neutral",
"sad": "Traurig",
"surprised": "Überrascht",
"angry": "Sauer",
"fearful": "Ängstlich",
"disgusted": "Angeekelt"
"search": "Suche",
"seconds": "{{count}} Sek.",
"speakerTime": "Sprechzeit",
"speakerStats": "Sprechstatistik",
"surprised": "Überrascht"
},
"startupoverlay": {
"policyText": " ",
@@ -1111,12 +1130,14 @@
"domuteVideoOfOthers": "Alle anderen Kameras auschalten",
"flip": "Spiegeln",
"grantModerator": "Moderationsrechte vergeben",
"hideSelfView": "Eigene Ansicht ausblenden",
"kick": "Hinauswerfen",
"moderator": "Moderation",
"mute": "Person ist stumm geschaltet",
"muted": "Stummgeschaltet",
"videoMuted": "Kamera ausgeschaltet",
"remoteControl": "Fernsteuerung",
"screenSharing": "Person teilt den Bildschirm",
"show": "Im Vordergrund anzeigen",
"videomute": "Person hat die Kamera angehalten"
},

View File

@@ -1005,7 +1005,7 @@
"surprised": "Compartir audio",
"talkWhileMutedPopup": "¿Intentas hablar? Estás silenciado.",
"tileViewToggle": "Activar o desactivar vista en cuadrícula",
"toggleCamera": "Activar o desactivar cámara",
"toggleCamera": "Alternar cámara",
"videomute": "Iniciar o detener cámara",
"selectBackground": "Seleccionar fondo"
},
@@ -1169,4 +1169,4 @@
"rejectAll": "Rechazar todo",
"toggleLabel": "Activar sala de espera"
}
}
}

View File

@@ -5,6 +5,7 @@
"copyInvite": "Copiar la invitación a la reunión",
"copyLink": "Copiar el link de la reunión",
"copyStream": "Copiar el link de la transmisión en vivo",
"contacts": "contactos",
"countryNotSupported": "Aún no contamos con soporte a este destino.",
"countryReminder": "¿Llamando fuera de los Estados Unidos? ¡Por favor, asegúrese de empezar con el código de país!",
"defaultEmail": "Dirección de correo por defecto",
@@ -22,12 +23,15 @@
"noResults": "No se encontraron coincidencias",
"noValidNumbers": "Por favor ingrese un número de teléfono",
"outlookEmail": "Correo de Outlook",
"phoneNumbers": "números de teléfono",
"searching": "Buscando...",
"searchNumbers": "Agregar números telefónicos",
"searchPeople": "Buscar personas",
"searchPeopleAndNumbers": "Buscar personas o añadir sus números de teléfono",
"shareInvite": "Compartir la invitación a la reunión",
"shareLink": "Compartir el link de la reunion",
"shareStream": "Compartir el link de la transmición en vivo",
"sipAddresses": "direcciones SIP",
"telephone": "Teléfono: {{number}}",
"title": "Invitar a otras personas a esta reunión",
"yahooEmail": "Correo de Yahoo"
@@ -61,6 +65,7 @@
"today": "Hoy"
},
"chat": {
"enter": "Entrar en la sala",
"error": "Error: su mensaje no se envío. Motivo: {{error}}",
"fieldPlaceHolder": "Escriba su mensaje aquí",
"messagebox": "Escriba un mensaje",
@@ -72,6 +77,14 @@
"titleWithPolls": "Introduce un apodo para usar el chat"
},
"privateNotice": "Mensaje privado para {{recipient}}",
"message": "Mensaje",
"messageAccessibleTitle": "{{user}} dice:",
"messageAccessibleTitleMe": "yo digo:",
"smileysPanel": "Panel de Emojis",
"tabs": {
"chat": "Chat",
"polls": "Encuestas"
},
"title": "Chat",
"titleWithPolls": "Chat",
"you": "usted"
@@ -79,7 +92,8 @@
"chromeExtensionBanner": {
"installExtensionText": "Instalar la extensión para Google Calendar y la integración con Office 365",
"buttonText": "Instalar extensión de Chrome",
"dontShowAgain": "No mostrar nuevamente"
"dontShowAgain": "No mostrar nuevamente",
"close": "Cerrar"
},
"connectingOverlay": {
"joiningRoom": "Conectándose a su reunión…"
@@ -147,10 +161,10 @@
"description": "¿No pasó nada? Hemos intentado iniciar la reunión en la aplicación de escritorio {{app}}. Intenta de nuevo o inicia en la aplicación web {{app}}.",
"descriptionWithoutWeb": "¿No pasó nada? Intentamos iniciar su reunión en la aplicación de escritorio {{app}}.",
"downloadApp": "Descargar la app",
"launchWebButton": "Iniciar en el navegador",
"ifDoNotHaveApp": "Si aún no tienes la app:",
"ifHaveApp": "Si ya tienes la app:",
"joinInApp": "Unirse a la reunion usando la app",
"launchWebButton": "Iniciar en el navegador",
"openApp": "Continuar a la aplicación",
"title": "Iniciando la reunión en {{app}}…",
"tryAgainButton": "Intentar de nuevo en el escritorio"
@@ -178,12 +192,14 @@
"alreadySharedVideoMsg": "Otro participante ya está compartiendo un video. Esta conferencia sólo permite compartir un video a la vez.",
"alreadySharedVideoTitle": "Solo se permite un video compartido a la vez",
"applicationWindow": "Ventana de aplicación",
"authenticationRequired": "Se requiere autenticación",
"Back": "Anterior",
"cameraConstraintFailedError": "Su cámara no satisface algunos de los requerimientos.",
"cameraNotFoundError": "No se encontró la cámara.",
"cameraNotSendingData": "No podemos acceder a la cámara. Asegúrate que no haya otra aplicación usándola, selecciona otro dispositivo del menú de configuración o intenta volver a cargar la aplicación.",
"cameraNotSendingDataTitle": "No es posible acceder a la cámara",
"cameraPermissionDeniedError": "No has otorgado permiso para usar la cámara. Puedes unirte a la conferencia de todos modos, pero los demás asistentes no te podrán ver. Usa el botón de la cámara en la barra de direcciones para solucionar esto.",
"cameraTimeoutError": "No se ha podido iniciar la fuente de vídeo. Se ha agotado el tiempo de espera.",
"cameraUnknownError": "No se puede usar la cámara por un motivo desconocido.",
"cameraUnsupportedResolutionError": "La cámara no admite la resolución de video requerida.",
"Cancel": "Cancelar",
@@ -198,16 +214,19 @@
"connectError": "¡Oops! Algo salió mal y no fue posible conectarnos a la conferencia.",
"connectErrorWithMsg": "¡Oops! Algo salió mal y no fue posible conectarnos a la conferencia: {{msg}}",
"connecting": "Conectando",
"copied": "Copiado",
"contactSupport": "Contacta al soporte técnico",
"copied": "Copiado",
"copy": "Copiar",
"dismiss": "Descartar",
"displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
"done": "Listo",
"e2eeLabel": "Habilitar cifrado Extremo-a-Extremo",
"e2eeDescription": "El cifrado de extremo a extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activarlo puede deshabilitar servicios como: grabación, transmisión en vivo y participación telefónica. Además, esta reunión solo funcionará con personas que se unan con un navegador.",
"e2eeLabel": "Habilitar cifrado Extremo-a-Extremo",
"e2eeDisabledDueToMaxModeDescription": "No se puede activar el cifrado de extremo a extremo debido al gran número de participantes en la conferencia.",
"e2eeWarning": "ADVERTENCIA: No todos los participantes de esta reunión soportan el cifrado de extremo a extremo. Si usted habilita esta opción, ellos no podrán verlo ni oírlo.",
"e2eeWillDisableDueToMaxModeDescription": "ADVERTENCIA: El cifrado de extremo a extremo se desactivará automáticamente si se unen más participantes a la conferencia.",
"enterDisplayName": "Por favor ingresa tu nombre aquí",
"embedMeeting": "Incrustar reunión",
"error": "Error",
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir pantalla.",
"externalInstallationTitle": "Extensión requerida",
@@ -215,6 +234,7 @@
"gracefulShutdown": "Nuestro servicio se encuentra en mantenimiento. Por favor, intente más tarde.",
"grantModeratorDialog": "¿Estas seguro de que quieres convertir a este participante en moderator?",
"grantModeratorTitle": "Convertir en moderador",
"hideShareAudioHelper": "No volver a mostrar este diálogo",
"IamHost": "Soy el anfitrión",
"incorrectRoomLockPassword": "Contraseña incorrecta",
"incorrectPassword": "Nombre de usuario o contraseña incorrecta",
@@ -235,6 +255,7 @@
"lockRoom": "Agregar $t(lockRoomPasswordUppercase) a la reunión",
"lockTitle": "El bloqueo falló",
"logoutQuestion": "¿Está seguro que desea salir y detener la conferencia?",
"login": "Iniciar sesión",
"logoutTitle": "Cerrar sesión",
"maxUsersLimitReached": "El límite máximo de participantes ha sido alcanzado. Por favor contacta al organizador o intenta más tarde.",
"maxUsersLimitReachedTitle": "La reunión está llena.",
@@ -243,27 +264,46 @@
"micNotSendingData": "Vaya a la configuración de su computadora para activar el micrófono y ajustar su nivel",
"micNotSendingDataTitle": "Su micrófono está silenciado en la configuración de su sistema",
"micPermissionDeniedError": "No ha otorgado permisos para usar su micrófono. Puede unirse a la conferencia, pero no lo podrán escuchar. Utilice el botón en la barra de dirección para solucionar esto.",
"micTimeoutError": "No se ha podido iniciar la fuente de audio. Se ha agotado el tiempo de espera.",
"micUnknownError": "No se puede usar el micrófono por motivos desconocidos.",
"moderationAudioLabel": "Permitir a los asistentes activar su audio.",
"moderationVideoLabel": "Permitir a los asistentes activar su video.",
"muteEveryoneElseDialog": "Una vez silenciados, no podrás quitarles el modo silencio, pero ellos podrán hacerlo en cualquier momento.",
"muteEveryoneElseTitle": "¿Silenciar a todos excepto a {{whom}}?",
"muteEveryoneDialog": "¿Estás seguro que quieres silenciar a todos? No podrás quitarles el silencio, pero ellos pueden quitárselo en cualquier momento.",
"muteEveryoneDialogModerationOn": "Los participantes pueden enviar una solicitud de intervención en cualquier momento.",
"muteEveryoneTitle": "¿Silenciar a todos?",
"muteEveryoneElsesVideoDialog": "Una vez desactivada la cámara, no podrás volver a activarla, pero pueden volver a activarla en cualquier momento.",
"muteEveryoneElsesVideoTitle": "¿Detener el vídeo de todos, excepto el de {{whom}}?",
"muteEveryonesVideoDialog": "Los participantes pueden encender su vídeo en cualquier momento.",
"muteEveryonesVideoDialogModerationOn": "Los participantes pueden enviar una solicitud para encender su vídeo en cualquier momento.",
"muteEveryonesVideoDialogOk": "Desactivar",
"muteEveryonesVideoTitle": "¿Detener el vídeo de todos?",
"muteEveryoneSelf": "ti mismo",
"muteEveryoneStartMuted": "Todos inician silenciados desde ahora",
"muteParticipantBody": "No podrás quitarles el modo en silencio, pero ellos pueden quitárselo en cualquier momento.",
"muteParticipantButton": "Silenciar",
"muteParticipantDialog": "¿Seguro que quieres silenciar a este participante? No podrás revertir esta acción, pero el participante podrá hacerlo en cualquier momento",
"muteParticipantsVideoDialog": "¿Estás seguro de que quieres apagar la cámara de este participante? No podrás volver a encender la cámara, pero ellos pueden volver a encenderla en cualquier momento.",
"muteParticipantTitle": "¿Silenciar a este participante?",
"muteParticipantsVideoButton": "Detener video",
"muteParticipantsVideoTitle": "¿Desactivar la cámara de este participante?",
"muteParticipantsVideoBody": "No podrás volver a encender la cámara, pero ellos pueden volver a encenderla en cualquier momento.",
"noDropboxToken": "No hay un token válido de Dropbox",
"Ok": "Aceptar",
"password": "Contraseña",
"passwordLabel": "$t(lockRoomPasswordUppercase)",
"passwordNotSupported": "No se soporta $t(lockRoomPassword) en la reunión",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) no es compatible",
"passwordRequired": "$t(lockRoomPasswordUppercase) necesario",
"permissionErrorTitle": "Permiso necesario",
"permissionCameraRequiredError": "El permiso de cámara es necesario para participar en conferencias con vídeo. Por favor, permítelo en Ajustes",
"permissionMicRequiredError": "El permiso de micrófono es necesario para participar en conferencias con sonido. Por favor, permítelo en Ajustes",
"popupError": "Su navegador está bloqueando las ventanas emergentes de este sitio. Habilite las ventanas emergentes en la configuración de seguridad de su navegador y vuelva a intentarlo.",
"popupErrorTitle": "Ventana emergente bloqueada",
"readMore": "mas",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "No es posible mientras la transmisión en vivo este activa",
"recording": "Grabando",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "No es posible mientras la transmisión en vivo este activa",
"recordingDisabledForGuestTooltip": "Los invitados no pueden iniciar grabaciones.",
"recordingDisabledTooltip": "Inicio de grabación desactivado.",
"rejoinNow": "Reunirse ahora",
@@ -295,7 +335,15 @@
"sendPrivateMessageTitle": "¿Enviar en privado?",
"serviceUnavailable": "Servicio no disponible",
"sessTerminated": "Llamada terminada",
"sessionRestarted": "Llamada reiniciada por un problema de conexión.",
"Share": "Compartir",
"shareAudio": "Continuar",
"shareAudioTitle": "Cómo compartir el audio",
"shareAudioWarningTitle": "Hay que dejar de compartir la pantalla antes de compartir el audio",
"shareAudioWarningH1": "Si quieres compartir sólo el audio:",
"shareAudioWarningD1": "debes dejar de compartir la pantalla antes de compartir el audio.",
"shareAudioWarningD2": "Tienes que reiniciar tu pantalla compartida y marcar la opción \"compartir audio\".",
"shareMediaWarningGenericH2": "Si quieres compartir tu pantalla y audio",
"shareVideoLinkError": "Proporciona un enlace de YouTube correcto.",
"shareVideoTitle": "Compartir un video",
"shareYourScreen": "Compartir pantalla",
@@ -304,6 +352,11 @@
"startLiveStreaming": "Iniciar transmisión en vivo",
"startRecording": "Iniciar grabación",
"startRemoteControlErrorMessage": "Se produjo un error al intentar iniciar la sesión de control remoto.",
"shareScreenWarningTitle": "Tienes que dejar de compartir el audio antes de compartir la pantalla",
"shareScreenWarningH1": "Si quieres compartir sólo tu pantalla:",
"shareScreenWarningD1": "debes dejar de compartir el audio antes de compartir la pantalla.",
"shareScreenWarningD2": "tienes que dejar de compartir el audio, empezar a compartir la pantalla y marcar la opción \"compartir el audio\".",
"sharedVideoLinkPlaceholder": "Enlace de YouTube o enlace de vídeo directo",
"stopLiveStreaming": "Detener transmisión en vivo",
"stopRecording": "Detener grabación",
"stopRecordingWarning": "¿Estás seguro de que deseas detener la grabación?",
@@ -316,12 +369,21 @@
"tokenAuthFailedTitle": "Error de autenticación",
"transcribing": "Transcribiendo",
"unlockRoom": "Quitar la $t(lockRoomPassword) de reunión",
"user": "Usuario",
"userIdentifier": "Identificador de usuario",
"userPassword": "contraseña del usuario",
"videoLink": "Enlace de vídeo",
"viewUpgradeOptions": "Ver opciones de mejora",
"viewUpgradeOptionsContent": "Para obtener acceso ilimitado a las funciones premium, como la grabación, las transcripciones, el streaming RTMP y otras, tendrás que actualizar tu plan.",
"viewUpgradeOptionsTitle": "¡Has descubierto una característica premium!",
"WaitForHostMsg": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.",
"WaitForHostMsgWOk": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, presiona Aceptar para autenticar. De lo contrario, espera a que llegue el anfitrión.",
"WaitingForHost": "Esperando al anfitrión…",
"WaitingForHostTitle": "Esperando al anfitrión...",
"Yes": "Sí",
"yourEntireScreen": "Toda la pantalla"
"yourEntireScreen": "Toda la pantalla",
"remoteUserControls": "El control remoto de {{username}}",
"localUserControls": "Controles de usuario locales"
},
"dialOut": {
"statusMessage": "está {{status}}"
@@ -335,8 +397,28 @@
"embedMeeting": {
"title": "Insertar reunión en sitio web"
},
"embedMeeting": {
"title": "Insertar esta reunión"
"virtualBackground": {
"apply": "Aplicar",
"title": "Fondos virtuales",
"blur": "Desenfoque",
"slightBlur": "Desenfoque Ligero",
"removeBackground": "Eliminar el fondo",
"addBackground": "Añadir fondo",
"pleaseWait": "Por favor, espera...",
"none": "Ninguno",
"uploadedImage": "Imagen subida {{index}}",
"deleteImage": "Borrar imagen",
"image1": "Playa",
"image2": "Pared neutra blanca",
"image3": "Habitación blanca y vacía",
"image4": "Lámpara de pie negra",
"image5": "Montaña",
"image6": "Bosque",
"image7": "Amanecer",
"desktopShareError": "No se ha podido crear el escritorio compartido",
"desktopShare": "Compartir el escritorio",
"webAssemblyWarning": "No se admite WebAssembly",
"backgroundEffectError": "No se ha podido aplicar el efecto de fondo."
},
"feedback": {
"average": "Promedio",
@@ -345,7 +427,8 @@
"good": "Buena",
"rateExperience": "¿Cómo estuvo tu experiencia en la reunión?",
"veryBad": "Muy mala",
"veryGood": "Muy buena"
"veryGood": "Muy buena",
"star": "Estrella"
},
"incomingCall": {
"answer": "Contestar",
@@ -362,6 +445,7 @@
"country": "País",
"dialANumber": "Para unirte a la reunión, marca uno de estos números y, luego introduce el PIN.",
"dialInConferenceID": "PIN:",
"copyNumber": "Copiar número",
"dialInNotSupported": "Lo sentimos, actualmente no se admite el marcado telefónico a la reunión.",
"dialInNumber": "Marcar:",
"dialInSummaryError": "Se ha producido un error al capturar la información de marcación. Vuelva a intentarlo más tarde",
@@ -370,6 +454,11 @@
"inviteLiveStream": "Para ver la transmisión en vivo de esta reunión, haz clic en este enlace: {{url}}",
"invitePhone": "También puedes entrar por llamada telefónica: Marca al número {{number}}, y al escuchar la contestadora introduce {{conferenceID}}#\n",
"invitePhoneAlternatives": "Si necesitas un número telefónico de otro país, revisa los números disponibles en {{url}}\n\n\nSi además de entrar vía llamada vas a usar otro dispositivo, puedes usar este link para entrar sin audio: {{silentUrl}}",
"inviteSipEndpoint": "Para unirse utilizando la dirección SIP, introduzca esto: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} te invita a una reunión.",
"inviteTextiOSJoinSilent": "Si marca a través de un teléfono de sala, utilice este enlace para unirse sin conectarse al audio: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "Haz clic en el siguiente enlace para unirte: {{inviteUrl}}.",
"inviteTextiOSPhone": "Para participar por teléfono, utiliza este número: {{number}},,{{conferenceID}}. Si buscas otro número, ésta es la lista completa: {{didUrl}}.",
"inviteURLFirstPartGeneral": "Estás invitado a unirte a una reunión.",
"inviteURLFirstPartPersonal": "{{name}} te esta invitando a una reunión.\n",
"inviteURLSecondPart": "\nLink para unirse a la reunión:\n{{url}}\n",
@@ -380,6 +469,7 @@
"noRoom": "No se especificó la sala a marcar.",
"numbers": "Números para entrar por llamada telefónica:",
"password": "$t(lockRoomPasswordUppercase):",
"sip": "Dirección SIP",
"title": "Compartir",
"tooltip": "Compartir el enlace y acceso telefónico para esta reunión",
"label": "Información de la reunión"
@@ -398,6 +488,7 @@
"support": "Soporte",
"supportMsg": "Si esto sigue ocurriendo, contacta a"
},
"jitsiHome": "{{logo}} Logotipo, enlaces a la página web",
"keyboardShortcuts": {
"focusLocal": "Ver tu cámara",
"focusRemote": "Ver la cámara de otras personas",
@@ -410,6 +501,7 @@
"showSpeakerStats": "Mostrar estadísticas de los hablantes",
"toggleChat": "Abrir o cerrar el chat",
"toggleFilmstrip": "Mostrar u ocultar miniaturas de video",
"toggleParticipantsPane": "Mostrar u ocultar el panel de participantes",
"toggleScreensharing": "Cambiar entre cámara y pantalla compartida",
"toggleShortcuts": "Mostrar u ocultar atajos del teclado",
"videoMute": "Prender o apagar la cámara",
@@ -482,6 +574,8 @@
"lockRoomPasswordUppercase": "Contraseña",
"me": "yo",
"notify": {
"allowAction": "Permitir",
"allowedUnmute": "Puedes anular el silencio del micrófono, iniciar la cámara o compartir la pantalla.",
"connectedOneMember": "{{name}} se unió a la reunión",
"connectedThreePlusMembers": "{{name}} y {{count}} más se unieron a la reunión",
"connectedTwoMembers": "{{first}} y {{second}} se unieron a la reunión",
@@ -489,6 +583,7 @@
"focus": "Enfocar conferencia",
"focusFail": "{{component}} no disponible. Vuelve a intentar en {{ms}} segundos",
"grantedTo": "Se otorgaron derechos de moderador a {{to}}.",
"hostAskedUnmute": "El moderador quiere que hables",
"invitedOneMember": "{{name}} ha sido invitado",
"invitedThreePlusMembers": "{{name}} y {{count}} más han sido invitados",
"invitedTwoMembers": "{{first}} y {{second}} han sido invitados",
@@ -499,9 +594,13 @@
"mutedTitle": "¡Estás silenciado!",
"mutedRemotelyTitle": "¡{{Nombre del participante}} te ha silenciado!",
"mutedRemotelyDescription": "Siempre puedes reactivar tu micrófono cuando estés listo para hablar. Vuélvelo a apagar cuando termines de hablar para no hacer ruido.",
"videoMutedRemotelyTitle": "Su vídeo ha sido desactivado por {{moderator}}",
"videoMutedRemotelyDescription": "Siempre puedes volver a encenderlo.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) eliminada por otro participante",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) agregada por otro participante",
"raisedHand": "{{name}} quisiera hablar.",
"screenShareNoAudio": "La casilla Compartir audio no estaba marcada en la pantalla de selección de ventanas.",
"screenShareNoAudioTitle": "No se pudo compartir el audio del sistema.",
"somebody": "Alguien",
"startSilentTitle": "¡Te uniste sin audio!",
"startSilentDescription": "Vuelve a ingresar para activar el audio",
@@ -514,10 +613,76 @@
"OldElectronAPPTitle": "¡Aplicación obsoleta e insegura!",
"oldElectronClientDescription1": "Estás usando una versión vieja de la aplicación de Jitsi Meet que tiene problemas de seguridad. ¡Por favor, actualiza a la ",
"oldElectronClientDescription2": "versión más reciente",
"oldElectronClientDescription3": " YA!"
"oldElectronClientDescription3": " YA!",
"moderationInEffectDescription": "Por favor, levanten la mano si quieren hablar.",
"moderationInEffectCSDescription": "Por favor, levante la mano si quiere compartir su pantalla.",
"moderationInEffectVideoDescription": "Por favor, levanten la mano si quieren encender su cámara.",
"moderationInEffectTitle": "Su micrófono está silenciado por el moderador",
"moderationInEffectCSTitle": "La pantalla compartida está bloqueada por el moderador",
"moderationInEffectVideoTitle": "Su cámara está bloqueada por el moderador",
"moderationRequestFromModerator": "El anfitrión desea que se desactive el silencio",
"moderationRequestFromParticipant": "Quiere hablar",
"moderationStartedTitle": "Comienzo de la moderación",
"moderationStoppedTitle": "La moderación se detuvo",
"moderationToggleDescription": "por {{participantDisplayName}}",
"raiseHandAction": "Levantar la mano",
"reactionSounds": "Desactivar sonidos",
"groupTitle": "Notificaciones"
},
"participantsPane": {
"close": "Cerrar",
"header": "Participantes",
"headings": {
"lobby": "Vestíbulo ({{count}})",
"participantsList": "Participantes en la reunión ({{count}})",
"waitingLobby": "Esperando en el vestíbulo ({{count}})"
},
"actions": {
"allow": "Permitir a los asistentes:",
"allowVideo": "Permitir vídeo",
"audioModeration": "Desmutearse a sí mismos",
"blockEveryoneMicCamera": "Bloquear el micrófono y la cámara de todos.",
"invite": "Invitar a alguien",
"askUnmute": "Pida que le quiten el silencio",
"mute": "Silenciar",
"muteAll": "Silenciar a todos los demás",
"muteEveryoneElse": "Silenciar al resto",
"stopEveryonesVideo": "Detener el vídeo de todos",
"stopVideo": "Detener el vídeo",
"unblockEveryoneMicCamera": "Desbloquear el micrófono y la cámara de todos",
"videoModeration": "Iniciar su vídeo"
}
},
"passwordSetRemotely": "definida por otro participante",
"passwordDigitsOnly": "Hasta {{number]] cifras",
"polls": {
"create": {
"addOption": "Añadir opción",
"answerPlaceholder": "Opción {{index}}",
"create": "Crear una encuesta",
"cancel": "Cancelar",
"pollOption": "Opción de encuesta {{index}}",
"pollQuestion": "Pregunta de la encuesta",
"questionPlaceholder": "Haz una pregunta",
"removeOption": "Eliminar la opción",
"send": "Enviar"
},
"answer": {
"skip": "Saltar",
"submit": "Enviar"
},
"results": {
"vote": "Vota",
"changeVote": "Cambiar el voto",
"empty": "Todavía no hay encuestas en la reunión. ¡Inicie una encuesta aquí!",
"hideDetailedResults": "Ocultar detalles",
"showDetailedResults": "Mostrar detalles"
},
"notification": {
"title": "Se ha añadido una nueva encuesta a esta reunión",
"description": "Abre la pestaña de encuestas para votar"
}
},
"poweredby": "con tecnología de",
"prejoin": {
"audioDeviceProblem": "Hay un problema con su dispositivo de audio",
@@ -541,6 +706,7 @@
"videoTearing": "Prevemos que su video se pixelará o tendrá artefactos visuales."
},
"errorMissingName": "Ingrese su nombre para unirse a la reunión",
"errorNoPermissions": "Tienes que habilitar el acceso al micrófono y a la cámara",
"premeeting": "Pre-reunión",
"showScreen": "Habilitar pantalla pre-reunión",
"audioAndVideoError": "Error en audio y video:",
@@ -591,6 +757,7 @@
"ringing": "Timbrando…"
},
"profile": {
"avatar": "avatar",
"setDisplayNameLabel": "Configura tu nombre para mostrar",
"setEmailInput": "Introducir correo electrónico",
"setEmailLabel": "Configurar tu correo electrónico de Gravatar",
@@ -603,7 +770,9 @@
"beta": "BETA",
"busy": "Estamos trabajando para liberar recursos de grabación. Vuelve a intentarlo en unos minutos.",
"busyTitle": "Todas las grabadoras están actualmente ocupadas",
"copyLink": "Copiar enlace",
"error": "Error de grabación. Vuelve a intentarlo.",
"errorFetchingLink": "Error en la obtención del enlace de grabación.",
"expandedOff": "Grabación detenida",
"expandedOn": "La reunión está siendo grabada.",
"expandedPending": "La grabación se está iniciando…",
@@ -611,6 +780,7 @@
"limitNotificationDescriptionNative": "Su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <3>{{app}}</3>.",
"failedToStart": "No se pudo iniciar la grabación",
"fileSharingdescription": "Compartir la grabación con los participantes de la reunión",
"linkGenerated": "Hemos generado un enlace a su grabación.",
"live": "EN VIVO",
"loggedIn": "Sesión iniciada como {{userName}}",
"off": "Grabación detenida",
@@ -620,11 +790,13 @@
"pending": "Preparando para grabar la reunión…",
"rec": "GRA",
"serviceDescription": "El servicio de grabación guardará la grabación",
"serviceDescriptionCloud": "Grabación en la nube",
"serviceName": "Servicio de grabación",
"signIn": "Iniciar sesión",
"signOut": "Cerrar sesión",
"unavailable": "¡Uy! {{serviceName}} actualmente no está disponible. Estamos trabajando para resolver el problema. Vuelve a intentarlo más tarde.",
"unavailableTitle": "Grabación no disponible"
"unavailableTitle": "Grabación no disponible",
"uploadToCloud": "Subir a la nube"
},
"sectionList": {
"pullToRefresh": "Mueve el dedo para abajo para actualizar."
@@ -643,8 +815,13 @@
"signedIn": "Actualmente se accede a eventos del calendario para {{email}}. Haz clic en el botón Desconectar más abajo para detener el acceso a eventos del calendario.",
"title": "Calendario"
},
"desktopShareFramerate": "Velocidad de fotogramas para compartir el escritorio",
"desktopShareWarning": "Es necesario reiniciar la pantalla compartida para que los nuevos ajustes surtan efecto.",
"desktopShareHighFpsWarning": "Una mayor velocidad de fotogramas para el uso compartido de la pantalla podría afectar a su ancho de banda. Es necesario reiniciar la pantalla compartida para que la nueva configuración surta efecto.",
"devices": "Dispositivos",
"followMe": "Todos me siguen",
"framesPerSecond": "fotogramas-por-segundo",
"incomingMessage": "Mensaje entrante",
"language": "Idioma",
"loggedIn": "Sesión iniciada como {{name}}",
"microphones": "Micrófono",
@@ -652,12 +829,19 @@
"more": "Más",
"name": "Nombre",
"noDevice": "Ninguno",
"participantJoined": "Un articipante incorporado",
"participantLeft": "Un participante se ha ido",
"playSounds": "Reproducir sonido",
"reactions": "Reacciones de la reunión",
"sameAsSystem": "Igual que el sistema ({{label}})",
"selectAudioOutput": "Salida de audio",
"selectCamera": "Cámara",
"selectMic": "Micrófono",
"sounds": "Sonidos",
"speakers": "Bocinas",
"startAudioMuted": "Todos inician silenciados",
"startVideoMuted": "Todos inician con cámara desactivada",
"talkWhileMuted": "Hablar en silencio",
"title": "Ajustes"
},
"settingsView": {
@@ -670,9 +854,9 @@
"conferenceSection": "Conferencia",
"disableCallIntegration": "Desactivar la integración nativa de llamadas",
"disableP2P": "Desactivar la comunicación directa (\"Peer-To-Peer\")",
"displayName": "Nombre a mostrar",
"disableCrashReporting": "Desactivar el reporte de crasheos",
"disableCrashReportingWarning": "¿Estás seguro que no deseas reportarnos los crasheos? La opción se activará al reiniciar la app.",
"displayName": "Nombre a mostrar",
"email": "Correo electrónico",
"header": "Configuración",
"profileSection": "Perfil",
@@ -688,6 +872,7 @@
},
"speaker": "Participante",
"speakerStats": {
"search": "Buscar",
"hours": "{{count}} h",
"minutes": "{{count}} min",
"name": "Nombre",
@@ -697,6 +882,7 @@
},
"startupoverlay": {
"policyText": " ",
"genericTitle": "La reunión debe utilizar su micrófono y su cámara.",
"title": "{{app}} necesita usar el micrófono y la cámara."
},
"suspendedoverlay": {
@@ -708,14 +894,15 @@
"accessibilityLabel": {
"audioOnly": "Alternar cámaras de los demás",
"audioRoute": "Seleccionar el dispositivo de sonido",
"boo": "Boo",
"callQuality": "Administrar la calidad de video",
"cc": "Alternar subtítulos",
"chat": "Alternar ventana de chat",
"clap": "Aplauso",
"document": "Alternar documento compartido",
"download": "Descargar nuestras aplicaciones",
"embedMeeting": "Insertar reunión",
"grantModerator": "Convertir en moderador",
"lobbyButton": "Activar / desactivar sala de espera",
"e2ee": "Cifrado de extremo a extremo",
"feedback": "Dejar comentarios",
"fullScreen": "Alternar pantalla completa",
@@ -725,6 +912,9 @@
"lobbyButtonDisable": "Desactivar sala de espera",
"lobbyButtonEnable": "Activar sala de espera",
"kick": "Expulsar participante",
"laugh": "Ríete",
"like": "Pulgares arriba",
"lobbyButton": "Activar / desactivar sala de espera",
"localRecording": "Alternar controles de grabación local",
"lockRoom": "Alternar contraseña de la reunión",
"moreActions": "Alternar más acciones",
@@ -732,39 +922,57 @@
"moreOptions": "Mostrar más opciones",
"mute": "Silenciar micrófono",
"muteEveryone": "Silenciar a todos",
"muteEveryoneElse": "Silenciar a todos los demás",
"muteEveryonesVideo": "Desactivar el vídeo de todos",
"muteEveryoneElsesVideo": "Desactivar el vídeo de los demás",
"participants": "Participantes",
"pip": "Alternar modo ventana en miniatura",
"privateMessage": "Enviar mensaje privado",
"profile": "Editar perfil",
"raiseHand": "Levantar o bajar la mano",
"reactionsMenu": "Abrir / Cerrar el menú de reacciones",
"recording": "Alternar grabación",
"remoteMute": "Silenciar participante",
"remoteVideoMute": "Desactivar la cámara del participante",
"security": "Opciones de seguridad",
"Settings": "Alternar configuración",
"shareaudio": "Compartir audio",
"sharedvideo": "Alternar video compartido de YouTube",
"shareRoom": "Invitar a alguien",
"shareYourScreen": "Alternar pantalla compartida",
"shortcuts": "Alternar accesos directos",
"show": "Mostrar en primer plano",
"silence": "Silencio",
"speakerStats": "Alternar estadísticas del orador",
"surprised": "Sorprendido",
"tileView": "Alternar vista de mosaico",
"toggleCamera": "Alternar cámara",
"toggleFilmstrip": "Alternar mosaicos",
"videomute": "Alternar video",
"videoblur": "Alternar desenfoque de video"
"videoblur": "Alternar desenfoque de video",
"selectBackground": "Seleccione el fondo",
"expand": "Ampliar",
"collapse": "Colapsar"
},
"addPeople": "Agregar personas a la llamada",
"audioSettings": "Ajustes de audio",
"videoSettings": "Ajustes de vídeo",
"audioOnlyOff": "Mostrar cámaras de los demás",
"audioOnlyOn": "Ocultar cámaras de los demás (para ahorrar datos)",
"audioRoute": "Selecciona el dispositivo de sonido",
"authenticate": "Autenticar",
"boo": "Boo",
"callQuality": "Ajustar la calidad de video",
"chat": "Abrir o cerrar chat",
"clap": "Aplauso",
"closeChat": "Cerrar chat",
"closeReactionsMenu": "Cerrar el menú de reacciones",
"disableReactionSounds": "Puede desactivar los sonidos de reacción para esta reunión",
"documentClose": "Cerrar documento compartido",
"documentOpen": "Abrir documento compartido",
"embedMeeting": "Insertar reunión",
"download": "Descarga nuestras aplicaciones",
"e2ee": "Cifrado de extremo a extremo",
"embedMeeting": "Insertar reunión",
"enterFullScreen": "Pantalla completa",
"enterTileView": "Ver en cuadrícula",
"exitFullScreen": "Salir de pantalla completa",
@@ -773,6 +981,8 @@
"hangup": "Colgar",
"help": "Ayuda",
"invite": "Invitar personas",
"laugh": "Ríete",
"like": "Pulgares arriba",
"lobbyButtonDisable": "Desactivar el modo lobby",
"lobbyButtonEnable": "Activar el modo lobby",
"login": "Inicio de sesión",
@@ -782,6 +992,7 @@
"moreOptions": "Más opciones",
"mute": "Activar o silenciar el micrófono",
"muteEveryone": "Silenciar a todos",
"muteEveryonesVideo": "Desactivar la cámara de todos",
"noAudioSignalTitle": "¡No se registra audio de tu micrófono!",
"noAudioSignalDesc": "Checa si no está silenciado en tu configuración del sistema o dispositivo, o cambia de micrófono.",
"noAudioSignalDescSuggestion": "Si no lo silenciaste a propósito desde la configuración del sistema o el dispositivo, intenta usar este otro micrófono:",
@@ -790,30 +1001,41 @@
"noisyAudioInputTitle": "Tu micrófono parece estar ruidoso",
"noisyAudioInputDesc": "Tu micrófono está haciendo ruido, siléncialo, ajusta su volumen en configuración del sistema, o cambia de micrófono.",
"openChat": "Abrir chat",
"openReactionsMenu": "Abrir el menú de reacciones",
"participants": "Participantes",
"pip": "Mostrar en ventana pequeña",
"privateMessage": "Enviar mensaje privado",
"profile": "Editar perfil",
"raiseHand": "Levantar o bajar la mano",
"raiseYourHand": "Levantar la mano",
"reactionBoo": "Enviar la reacción de Boo",
"reactionClap": "Enviar reacción de aplauso",
"reactionLaugh": "Enviar reacción de risa",
"reactionLike": "Enviar la reacción de los pulgares hacia arriba",
"reactionSilence": "Enviar reacción de silencio",
"reactionSurprised": "Enviar reacción de sorpresa",
"security": "Opciones de seguridad",
"Settings": "Configuración",
"shareaudio": "Compartir audio",
"sharedvideo": "Compartir un video de YouTube",
"shareRoom": "Invitar a alguien",
"shortcuts": "Ver atajos del teclado",
"silence": "Silencio",
"speakerStats": "Estadísticas de los hablantes",
"startScreenSharing": "Comenzar a compartir pantalla",
"startSubtitles": "Iniciar subtítulos",
"startvideoblur": "Desenfocar mi fondo",
"stopAudioSharing": "Dejar de compartir el audio",
"stopScreenSharing": "Dejar de compartir pantalla",
"stopSubtitles": "Detener subtítulos",
"stopSharedVideo": "Detener video de YouTube",
"stopvideoblur": "Desactivar el desenfoque de fondo",
"stopvideoblur": "Desactivar desenfoque del fondo",
"surprised": "Compartir audio",
"talkWhileMutedPopup": "¿Intentas hablar? Estás silenciado.",
"tileViewToggle": "Activar o desactivar vista en cuadrícula",
"toggleCamera": "Activar o desactivar cámara",
"videomute": "Iniciar o detener cámara",
"startvideoblur": "Desenfocar mi fondo",
"stopvideoblur": "Desactivar desenfoque del fondo"
"selectBackground": "Seleccionar fondo"
},
"transcribing": {
"ccButtonTooltip": "Iniciar o detener subtítulos",
@@ -839,6 +1061,7 @@
"react-nativeGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
"safariGrantPermissions": "Selecciona <b><i>Aceptar</i></b> cuando el navegador solicite permisos."
},
"volumeSlider": "Deslizador de volumen",
"videoSIPGW": {
"busy": "Estamos trabajando para liberar recursos. Vuelve a intentarlo en unos minutos.",
"busyTitle": "El servicio de salas está actualmente ocupado",
@@ -868,19 +1091,24 @@
"standardDefinition": "Definición estándar"
},
"videothumbnail": {
"connectionInfo": "Información de conexión",
"domute": "Silenciar",
"domuteVideo": "Desactivar la cámara",
"domuteOthers": "Silenciar a todos",
"grantModerator": "Convertir en moderador",
"domuteVideoOfOthers": "Desactivar la cámara de todos los demás",
"flip": "Voltear",
"grantModerator": "Convertir en moderador",
"kick": "Expulsar",
"moderator": "Moderador",
"mute": "Se silenció el participante",
"muted": "Silenciado",
"videoMuted": "Cámara desactivada",
"remoteControl": "Control remoto",
"show": "Mostrar en primer plano",
"videomute": "El participante paró su cámara"
},
"welcomepage": {
"addMeetingName": "Añadir el nombre de la reunión",
"accessibilityLabel": {
"join": "Toca para unirte",
"roomname": "Introduce el nombre de la sala"
@@ -895,22 +1123,37 @@
"connectCalendarText": "Conecta tu calendario para ver todas tus reuniones de {{app}}. Además, agrega reuniones a tu calendario e inícialas con un solo clic.",
"enterRoomTitle": "Comenzar una reunión",
"getHelp": "Obtener ayuda",
"roomNameAllowedChars": "El nombre de la reunión no debe contener ninguno de estos caracteres: ?, &, :, ', \", %, #.",
"go": "IR",
"goSmall": "IR",
"join": "CREAR / UNIRSE",
"headerTitle": "Jitsi Meet",
"headerSubtitle": "Reuniones seguras y de alta calidad",
"info": "Información",
"join": "CREAR / UNIRSE",
"jitsiOnMobile": "Jitsi en el móvil: descarga nuestras aplicaciones y comienza una reunión desde cualquier lugar",
"mobileDownLoadLinkIos": "Descargar la aplicación móvil para iOS",
"mobileDownLoadLinkAndroid": "Descargar la aplicación móvil para Android",
"mobileDownLoadLinkFDroid": "Descargar la aplicación móvil para F-Droid",
"moderatedMessage": "O <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">reserve con antelación una URL de reunión</a> en la que usted sea el único moderador.",
"privacy": "Privacidad",
"recentList": "Reciente",
"recentListDelete": "Eliminar",
"recentListEmpty": "Tu historial de reuniones está vacío. Reúnete y aparecerán aquí.",
"reducedUIText": "¡Bienvenid@ a {{app}}!",
"roomNameAllowedChars": "El nombre de la reunión no debe contener ninguno de estos caracteres: ?, &, :, ', \", %, #.",
"roomname": "Introduce el nombre de la sala",
"roomnameHint": "Introduce el nombre o URL de la sala a la que deseas unirte. Puedes inventar un nombre, simplemente infórmaselo a las personas con las que te reunirás para que introduzcan el mismo nombre.",
"sendFeedback": "Enviar sugerencias",
"startMeeting": "Iniciar la reunión",
"terms": "Términos",
"title": "Videoconferencias seguras, con gran variedad de funcionalidades y completamente gratuitas"
"title": "Videoconferencias seguras, con gran variedad de funcionalidades y completamente gratuitas",
"logo": {
"calendar": "Logotipo del calendario",
"microsoftLogo": "Logotipo de Microsoft",
"logoDeepLinking": "Logotipo de la reunión de Jitsi",
"desktopPreviewThumbnail": "Vista previa del escritorio en miniatura",
"googleLogo": "Logotipo de Google",
"policyLogo": "Logotipo de la política"
}
},
"lonelyMeetingExperience": {
"button": "Invita a otros",
@@ -920,6 +1163,8 @@
"header": "Centro de ayuda"
},
"lobby": {
"admit": "Admitir",
"admitAll": "Admitir todo",
"knockingParticipantList": "Participantes que quieren entrar",
"allow": "permitir",
"backToKnockModeButton": "No hay contraseña, pide permiso para entrar.",
@@ -932,6 +1177,7 @@
"enableDialogText": "La sala de espera te deja proteger tu reunión, de modo que todas los que entren enviarán una solicitud que deberá ser aprobada por un moderador.",
"enterPasswordButton": "Introduce la contraseña de la reunión",
"enterPasswordTitle": "Introduce la contraseña para poder entrar",
"errorMissingPassword": "Por favor, introduzca la contraseña de la reunión",
"invalidPassword": "Contraseña inválida",
"joiningMessage": "Podrás entrar tan pronto te acepten tu solicitud.",
"joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera...",
@@ -950,6 +1196,7 @@
"passwordField": "Introduce la contraseña de la reunión",
"passwordJoinButton": "Entrar",
"reject": "Rechazar",
"rejectAll": "Rechazar todo",
"toggleLabel": "Activar sala de espera"
}
}

View File

@@ -5,6 +5,7 @@
"copyInvite": "کپی کردن دعوت به جلسه",
"copyLink": "کپی کردن نشانی اینترنتی جلسه",
"copyStream": "کپی کردن نشانی اینترنتی پخش زنده",
"contacts": "مخاطبین",
"countryNotSupported": "این کشور پشتیبانی نمی‌شود",
"countryReminder": "می‌خواهید با خارج از کشور تماس بگیرید؟ لطفا شماره وارد شده را دوباره بررسی کنید!",
"defaultEmail": "رایانامه‌ی پیش‌فرض شما",
@@ -16,18 +17,14 @@
"inviteMoreMailSubject": "دعوت به جلسه در {{appName}}",
"inviteMorePrompt": "دعوت سایر افراد",
"linkCopied": "نشانی اینترنتی کپی شد",
"loading": "جستجوی افراد و شماره تلفن‌ها",
"loadingNumber": "اعتبارسنجی شماره تلفن",
"loadingPeople": "جستجوی افراد برای دعوت",
"noResults": "هیچ نتیجه‌ای مطابق با جستجوی شما یافت نشد",
"noValidNumbers": "لطفاً یک شماره تلفن وارد کنید",
"outlookEmail": "رایانامه‌ی اوت‌لوک",
"searchNumbers": "اضافه کردن شماره تلفنها",
"searchPeople": "جستجوی افراد",
"searchPeopleAndNumbers": "جستجوی افراد یا اضافه کردن شماره تلفن آن‌ها",
"phoneNumbers": "شماره تلفن ها",
"searching": "در حال جستجو",
"shareInvite": "به اشتراک‌گذاری جلسه",
"shareLink": "به اشتراک‌گذاری نشانی اینترنتی دعوت به جلسه",
"shareStream": "به اشتراک‌گذاری نشانی اینترنتی پخش زنده",
"sipAddresses": "آدرس ها sip",
"telephone": "تلفن: {{number}}",
"title": "دعوت افراد به این جلسه",
"yahooEmail": "رایانامه‌ی یاهو"
@@ -42,6 +39,28 @@
"audioOnly": {
"audioOnly": "پهنای باند پایین"
},
"blankPage": {
"meetingEnded": "جلسه تمام شد"
},
"breakoutRooms": {
"defaultName": "گروه‌های کوچک #{{index}}",
"mainRoom": "جلسه اصلی",
"actions": {
"add": "یک گروه کوچک اضافه کنید",
"autoAssign": "تخصیص خودکار به یک گروه کوچک",
"close": "ببندید",
"join": "پیوستن",
"leaveBreakoutRoom": "گروه کوچک را ترک کنید",
"more": "بیشتر",
"remove": "حذف کردن",
"sendToBreakoutRoom": "ارسال شرکت کننده به:"
},
"notifications": {
"joinedTitle": "گروه‌های کوچک",
"joined": "به گروه کوچک \"{{name}}\" میپیوندید",
"joinedMainRoom": "به جلسه اصلی بپیوندید"
}
},
"calendarSync": {
"addMeetingURL": "افزودن پیوند جلسه",
"confirmAddLink": "آیا می‌خواهید لینک برنامه به این رویداد اضافه شود؟",
@@ -61,6 +80,7 @@
"today": "امروز"
},
"chat": {
"enter": "وارد اتاق شوید",
"error": "پیام شما ارسال نشد: {{error}}",
"fieldPlaceHolder": "پیام خود را بنویسید",
"messagebox": "پیام خود را بنویسید",
@@ -69,17 +89,26 @@
"nickname": {
"popover": "نام نمایشی خود را وارد نمایید",
"title": "نام نمایشی خود را در گفتگو وارد نمایید",
"titleWithPolls": "نام نمایشی خود را در گفتگو وارد نمایید"
"titleWithPolls": "نام نمایشی خود را در گفتگو وارد نمایید با نظرسنجی ها"
},
"privateNotice": "پیام خصوصی به {{recipient}}",
"message": "پیام",
"messageAccessibleTitle": "{{user}} می‌گوید:",
"messageAccessibleTitleMe": "من میگویم:",
"smileysPanel": "پنل ایموجی",
"tabs": {
"chat": "چت",
"polls": "نظرسنجی ها"
},
"title": "گفتگو",
"titleWithPolls": "گفتگو",
"titleWithPolls": "گفتگو و نظرسنجی ها",
"you": "شما"
},
"chromeExtensionBanner": {
"installExtensionText": "برای اتصال به تقویم گوگل و برنامه آفیس 365 افزونه‌های مربوطه را نصب کنید",
"buttonText": "نصب افزونه‌ها",
"dontShowAgain": "دیگر نمایش نده"
"dontShowAgain": "دیگر نمایش نده",
"close": "ببندید"
},
"connectingOverlay": {
"joiningRoom": "اتصال به جلسه..."
@@ -151,7 +180,8 @@
"joinInApp": "به این جلسه بیپوندید",
"launchWebButton": "استفاده از نسخه‌ وب",
"title": "اجرای جلسه در {{app}}...",
"tryAgainButton": "تلاش دوباره با نسخه‌ دسکتاپ"
"tryAgainButton": "تلاش دوباره با نسخه‌ دسکتاپ",
"unsupportedBrowser": "به نظر می رسد در حال استفاده از مرورگری پشتیبانی نشده هستید."
},
"defaultLink": "مثال {{url}}",
"defaultNickname": "برای مثال: حبیب",
@@ -176,12 +206,14 @@
"alreadySharedVideoMsg": "یکی دیگر از شرکت‌کنندگان ویدیویی را به اشتراک گذاشته است؛ در این کنفرانس فقط یک ویدیو را می‌توان به صورت همزمان به اشتراک گذاشت",
"alreadySharedVideoTitle": "فقط یک ویدیو را می‌توان به صورت همزمان به اشتراک گذاشت",
"applicationWindow": "پنجره‌ی برنامه",
"authenticationRequired": "تأیید اعتبار مورد نیاز است",
"Back": "بازگشت",
"cameraConstraintFailedError": "دوربین شما برخی از قابلیت‌های مورد نیاز را ندارد",
"cameraNotFoundError": "دوربین پیدا نشد",
"cameraNotSendingData": "برنامه به دوربین شما دسترسی ندارد؛ بررسی کنید که برنامه دیگری در حال استفاده از دوربین نباشد، اگر می‌توانید دوربین دیگری را انتخاب کنید یا برنامه را رفرشگ کنید",
"cameraNotSendingDataTitle": "دسترسی به دوربین وجود ندارد",
"cameraPermissionDeniedError": "شما مجوز استفاده از دوربین را نداده‌اید؛ همچنان می‌توانید به کنفرانس بپیوندید، اما دیگران شما را نمی‌بینند. برای رفع این مشکل از دکمه دوربین در نوار آدرس استفاده کنید",
"cameraTimeoutError": "منبع ویدیو شروع نشد. یک وقفه دهنده رخ داد.",
"cameraUnknownError": "به دلایلی نامشخص نمی‌توان از دوربین استفاده کرد",
"cameraUnsupportedResolutionError": "دوربین شما از کیفیت تصویر مورد نیاز پشتیبانی نمی‌کند",
"Cancel": "لغو",
@@ -203,13 +235,17 @@
"displayNameRequired": "نام خود را وارد نمایید",
"done": "تایید",
"e2eeDescription": "<p>رمزگذاری دو طرفه در حال حاضر به صورت <strong>آزمایشی</strong> استفاده می‌شود؛ برای اطلاعات بیشتر می‌توانید <a href='https://jitsi.org/blog/e2ee/' target='_blank'>این مقاله</a> را ببینید.</p><br/><p>در نظر داشته باشید با فعال کردن رمز گذاری دو طرفه قابلیت‌های سمت سرو غیرفعال خواهند شد، قابلیت‌هایی از قبیل:ضبط، پخش زنده و مشارکت تلفنی در جلسات؛ همچنین افرادی می‌توانند به این جلسه بپیوندند که مرورگر آن‌ها از قابلیت پخش درون مرورگری پشتیبانی کند،</p>",
"e2eeLabel": "کلید E2EE",
"e2eeLabel": "رمزگذاری دو طرفه فعال کن ",
"e2eeDisabledDueToMaxModeDescription": "به دلیل تعداد زیاد شرکت کنندگان در کنفرانس، رمزگذاری دو طرفه در سرتاسری نمی تواند فعال شود.",
"e2eeWarning": "<br /><p><strong>هشدار:</strong> همه‌ی مشارکت کنندگان رمزنگاری دو طرفه را پشتیبانی نمی‌کنند؛ اگر این قابلیت را فعال کنید آن‌ها صدای جلسه را نمی‌شنوند و تصویر را مشاهده نخواهند کرد</p>",
"e2eeWillDisableDueToMaxModeDescription": "هشدار: اگر شرکت‌کنندگان بیشتری به کنفرانس بپیوندند، رمزگذاری دو طرفه به طور خودکار غیرفعال می‌شود.",
"enterDisplayName": "لطفا نام نمایشی خود را وارد نمایید",
"embedMeeting": "جاسازی جلسه",
"error": "خطا",
"gracefulShutdown": "سرویس در حال بروزرسانی است و موقتا در دسترس نمی‌باشد",
"grantModeratorDialog": "آیا می‌خواهید دسترسی مدیر را به این شرکت کننده اعطا کنید؟",
"grantModeratorTitle": "اعطای دسترسی مدیر",
"hideShareAudioHelper": "این پیام دوباره نشان داده نشود",
"IamHost": "من میزبان هستم",
"incorrectRoomLockPassword": "رمز عبور نامعتبر است",
"incorrectPassword": "نام کاربری یا رمز عبور نامعتبر است",
@@ -227,6 +263,7 @@
"lockRoom": "افزودن $t(lockRoomPasswordUppercase) برای جلسه",
"lockTitle": "قفل کردن با خطا مواجه شد",
"logoutQuestion": "آیا می‌خواهید خارج شوید و کنفرانس را پایان دهید؟",
"login": "ورود",
"logoutTitle": "خروج",
"maxUsersLimitReached": "تعداد شرکت کنندگان به حداکثر رسیده است؛ با مدیر جلسه تماس بگیرید یا بعدا دوباره تلاش کنید!",
"maxUsersLimitReachedTitle": "تعداد شرکت کنندگان به حداکثر میزان مجاز رسیده است",
@@ -235,22 +272,41 @@
"micNotSendingData": "برای روشن کردن میکروفن و تنظیم میزان صدای آن به تنظیمات رایانه خود بروید",
"micNotSendingDataTitle": "میکروفن شما در تنظیمات رایانه شما خاموش شده است",
"micPermissionDeniedError": "شما مجوز استفاده از میکروفن را نداده‌اید؛ همچنان می‌توانید به کنفرانس بپیوندید، اما دیگران صدای شما را نمی‌شنوند. برای رفع این مشکل از دکمه میکروفن در نوار آدرس استفاده کنید",
"micTimeoutError": "منبع صوتی شروع نشد. یک وقفه دهنده رخ داد.",
"micUnknownError": "به دلایلی نامشخص نمی‌توان از میکروفون استفاده کرد",
"moderationAudioLabel": "به شرکت کنندگان اجازه دهید میکروفن را شروع کنند",
"moderationVideoLabel": "به شرکت کنندگان اجازه دهید ویدیوی خود را شروع کنند",
"muteEveryoneElseDialog": "وقتی که میکروفون آن‌ها قطع شود، شما نمی‌توانید آن را وصل کنید، اما خودشان هر زمان که بخواهند، می‌توانند",
"muteEveryoneElseTitle": "میکروفون همه بجز {{whom}} قطع شود؟",
"muteEveryoneDialog": "میکروفون همه قطع شود؟ شما نمی‌توانید صدای آن‌ها را وصل کنید، اما خودشان هر زمان که بخواهند، می‌توانند",
"muteEveryoneDialogModerationOn": "شرکت کنندگان می توانند در هر زمان درخواستی برای صحبت ارسال کنند.",
"muteEveryoneTitle": "صدای همه قطع شود؟",
"muteEveryoneElsesVideoDialog": "پس از غیرفعال شدن دوربین، نمی‌توانید دوباره آن را روشن کنید، اما آنها می‌توانند در هر زمانی آن را دوباره روشن کنند.",
"muteEveryoneElsesVideoTitle": "ویدیوی همه به جز {{whom}} متوقف شود؟",
"muteEveryonesVideoDialog": "شرکت کنندگان می توانند در هر زمانی ویدیوی خود را روشن کنند.",
"muteEveryonesVideoDialogModerationOn": "شرکت‌کنندگان می‌توانند در هر زمان درخواستی برای روشن شدن ویدیوی خود ارسال کنند.",
"muteEveryonesVideoDialogOk": "غیرفعال کردن",
"muteEveryonesVideoTitle": "ویدیوی همه را متوقف کنید؟",
"muteEveryoneSelf": "خودتان",
"muteEveryoneStartMuted": "همه شرکت‌کنندگان از این به بعد بیصدا وارد می‌شوند",
"muteParticipantBody": "شما نمی‌توانید صدای آن‌ها را وصل کنید، اما خودشان هر زمان که بخواهند، می‌توانند",
"muteParticipantButton": "فطع کردن",
"muteParticipantDialog": "صدای این شرکت کننده قطع شود؟ شما نمی‌توانید صدای آن‌ها را وصل کنید، اما خودشان هر زمان که بخواهند، می‌توانند",
"muteParticipantTitle": "صدای این شرکت کننده قطع شود؟",
"muteParticipantsVideoDialog": "آیا مطمئنید که می‌خواهید دوربین این شرکتکننده را خاموش کنید؟ نمی‌توانید دوربین را دوباره روشن کنید، اما آنها می‌توانند هر زمان که بخواهند دوباره آن را روشن کنند.",
"muteParticipantsVideoDialogModerationOn": "آیا مطمئنید که می‌خواهید دوربین این شرکتکننده را خاموش کنید؟ نه شما می توانید دوربین را دوباره روشن کنید و نه آنها.",
"muteParticipantsVideoButton": "توقف ویدیو",
"muteParticipantsVideoTitle": "دوربین این شرکت کننده غیرفعال شود؟",
"muteParticipantsVideoBody": "نمی‌توانید دوربین را دوباره روشن کنید، اما آنها می‌توانند هر زمان که بخواهند دوباره آن را روشن کنند.",
"muteParticipantsVideoBodyModerationOn": "نه شما می توانید دوربین را دوباره روشن کنید و نه آنها.",
"noDropboxToken": "نشانه معتبر Dropbox وجود ندارد",
"Ok": "تایید",
"password": "رمز عبور",
"passwordLabel": "برای پیوستن به این جلسه باید $t(lockRoomPassword) آن را وارد نمایید",
"passwordNotSupported": "قابلیت تنظیم $t(lockRoomPassword) برای جلسه پشتیبانی نمی‌شود",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) پشتیبانی نمی‌شود",
"passwordRequired": "$t(lockRoomPasswordUppercase) جلسه",
"permissionErrorTitle": "مجوز الزامی است",
"permissionCameraRequiredError": "مجوز دوربین برای شرکت در کنفرانس های ویدئو مورد نیاز است. لطفاً آن را در تنظیمات اعطا کنید",
"permissionMicRequiredError": "مجوز میکروفون برای شرکت در کنفرانس های صوتی مورد نیاز است. لطفاً آن را در تنظیمات اعطا کنید",
"popupError": "مرورگر شما پنجره‌های بازشونده را در این سایت مسدود کرده است؛ در تنظیمات امنیتی مرورگر خود، پنجره‌های بازشونده را برای این سایت فعال کرده و دوباره امتحان کنید",
"popupErrorTitle": "پنجره‌های بازشونده مسدود شده است",
"readMore": "بیشتر",
@@ -282,7 +338,15 @@
"sendPrivateMessageTitle": "به صورت خصوصی ارسال شود؟",
"serviceUnavailable": "سرویس در دسترس نیست",
"sessTerminated": "تماس خاتمه یافت",
"sessionRestarted": "به دلیل مشکل اتصال، تماس مجدداً شروع شد.",
"Share": "به اشتراک گذاری",
"shareAudio": "‏‏ادامه",
"shareAudioTitle": "نحوه به اشتراک گذاری صدا",
"shareAudioWarningTitle": "قبل از اشتراک‌گذاری صدا، باید اشتراک‌گذاری صفحه را متوقف کنید",
"shareAudioWarningH1": "اگر می خواهید فقط صدا را به اشتراک بگذارید:",
"shareAudioWarningD1": "قبل از اشتراک‌گذاری صدا، باید اشتراک‌گذاری صفحه را متوقف کنید",
"shareAudioWarningD2": "باید اشتراک گذاری صفحه خود را مجدداً راه اندازی کنید و صدا را به اشتراک بگذارید را علامت بزنید.",
"shareMediaWarningGenericH2": "اگر می خواهید صفحه و صدای خود را به اشتراک بگذارید",
"shareVideoLinkError": "لظفا نشانی اینترنتی یوتیوب معتبر وارد نمایید",
"shareVideoTitle": "به اشتراک گذاری ویدیو",
"shareYourScreen": "به اشتراک گذاری صفحه",
@@ -290,6 +354,11 @@
"startLiveStreaming": "پخش زنده",
"startRecording": "ضبط جلسه",
"startRemoteControlErrorMessage": "در کنترل از راه دور خطایی روی داده است!",
"shareScreenWarningTitle": "قبل از اشتراک‌گذاری صفحه، باید اشتراک‌گذاری صدا را متوقف کنید",
"shareScreenWarningH1": "اگر می خواهید فقط صفحه را به اشتراک بگذارید:",
"shareScreenWarningD1": "قبل از اشتراک‌گذاری صفحه، باید اشتراک‌گذاری صدا را متوقف کنید",
"shareScreenWarningD2": "باید اشتراک‌گذاری صدا را متوقف کنید، اشتراک‌گذاری صفحه را شروع کنید و گزینه صدا را به اشتراک بگذارید را علامت بزنید.",
"sharedVideoLinkPlaceholder": "لینک یوتیوب یا لینک مستقیم ویدیو",
"stopLiveStreaming": "توقف پخش زنده",
"stopRecording": "توقف ضبط",
"stopRecordingWarning": "آیا می‌خواهید ضبط جلسه را متوقف کنید؟",
@@ -303,12 +372,19 @@
"transcribing": "زیرنویس",
"unlockRoom": "حذف $t(lockRoomPassword)",
"user": "کاربر",
"userIdentifier": "شناسه کاربر",
"userPassword": "رمز عبور کاربر",
"videoLink": "لینک ویدیو",
"viewUpgradeOptions": "به گزینه های ارتقا مراجعه کنید",
"viewUpgradeOptionsContent": "برای دسترسی نامحدود به ویژگی‌های ممتاز مانند ضبط، رونویسی، پخش جریانی RTMP و موارد دیگر، باید طرح خود را ارتقا دهید.",
"viewUpgradeOptionsTitle": "شما یک ویژگی حق بیمه را کشف کردید!",
"WaitForHostMsg": "کنفرانس <b>{{room}}</b> هنوز شروع نشده است، اگر میزبان هستید وارد شوید، در غیر اینصورت تا رسیدن میزبان و شروع جلسه منتظر بمانید",
"WaitForHostMsgWOk": "کنفرانس <b>{{room}}</b> هنوز شروع نشده است، اگر میزبان هستید برای احراز هویت تایید را بزنید، در غیر اینصورت تا رسیدن میزبان و شروع جلسه منتظر بمانید",
"WaitingForHost": "در انتظار میزبان ...",
"WaitingForHostTitle": "در حال انتظار برای میزبان...",
"Yes": "بله",
"yourEntireScreen": "تمام صفحه‌ی نمایش شما"
"yourEntireScreen": "تمام صفحه‌ی نمایش شما",
"remoteUserControls": "کنترل های کاربر از راه دور {{username}}",
"localUserControls": "کنترل های کاربر محلی"
},
"dialOut": {
"statusMessage": "{{status}} شد"
@@ -322,6 +398,30 @@
"embedMeeting": {
"title": "پیوند درون برنامه‌ای جلسه"
},
"virtualBackground": {
"apply": "اعمال کردن",
"title": "پس زمینه های مجازی",
"blur": "تار کردن",
"slightBlur": "تاری جزئی",
"removeBackground": "حذف پس‌زمینه",
"addBackground": "افزودن پس زمینه",
"pleaseWait": "‏‏لطفاً منتظر بمانید",
"none": "هیچکدام",
"uploadedImage": "آپلود تصویر {{index}}",
"deleteImage": "حذف تصویر",
"image1": "ساحل دریا",
"image2": "دیوار خنثی سفید",
"image3": "اتاق خالی سفید",
"image4": "چراغ طبقه مشکی",
"image5": "کوه",
"image6": "جنگل",
"image7": "طلوع خورشید",
"desktopShareError": "اشتراک گذاری دسکتاپ ایجاد نشد",
"desktopShare": "اشتراک گذاری دسکتاپ",
"webAssemblyWarning": "WebAssembly پشتیبانی نمی شود",
"webAssemblyWarningDescription": "WebAssembly توسط این مرورگر غیرفعال شده یا پشتیبانی نمی شود",
"backgroundEffectError": "جلوه پس زمینه اعمال نشد."
},
"feedback": {
"average": "متوسط",
"bad": "بد",
@@ -329,7 +429,8 @@
"good": "خوب",
"rateExperience": "به سامانه ببین در برگزاری این جلسه چه امتیازی می‌دهید؟",
"veryBad": "خیلی بد",
"veryGood": "خیلی خوب"
"veryGood": "خیلی خوب",
"star": "ستاره"
},
"incomingCall": {
"answer": "پاسخ دادن",
@@ -346,6 +447,7 @@
"country": "کشور",
"dialANumber": "برای پیوستن به جلسه، یکی از این شماره‌ها را شماره‌گیری کرده، سپس کد را وارد نمایید",
"dialInConferenceID": "کد:",
"copyNumber": "شماره کپی",
"dialInNotSupported": "قابلیت شماره‌گیری در حال حاضر پشتیبانی نمی‌شود",
"dialInNumber": "تماس با:",
"dialInSummaryError": "در واکشی اطلاعات شماره‌گیری خطایی رخ داده است؛ لطفا دوباره تلاش کنید",
@@ -354,6 +456,11 @@
"inviteLiveStream": "برای مشاهده‌ی پخش زنده‌ی این گفتگو روی این پیوند کلیک کنید: {{url}}",
"invitePhone": "برای پیوستن به این جلسه از طریق تلفن، این شماره را شماره‌گیری نمایید: {{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "شماره‌ی دیگری می‌خواهید؟\nهمهی شماره‌های این جلسه را ببینید: {{url}}\n\n\nمیتوانید بدون صدا به جلسه وصل شوید و فقط شنونده باشید: {{silentUrl}}",
"inviteSipEndpoint": "برای عضویت با استفاده از آدرس SIP، این را وارد کنید: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} شما را به یک جلسه دعوت می کند.",
"inviteTextiOSJoinSilent": "اگر از طریق تلفن اتاق شماره گیری می کنید، از این پیوند برای پیوستن بدون اتصال به صدا استفاده کنید: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "برای عضویت روی لینک کلیک کنید: {{inviteUrl}}",
"inviteTextiOSPhone": "برای عضویت از طریق تلفن، از این شماره استفاده کنید: {{number}},,{{conferenceID}}#. اگر به دنبال شماره دیگری هستید، این لیست کامل است: {{didUrl}}.",
"inviteURLFirstPartGeneral": "شما به جلسه دعوت شده‌اید",
"inviteURLFirstPartPersonal": "{{name}} شما را به جلسه دعوت کرده است\n",
"inviteURLSecondPart": "\nپیوستن به جلسه:\n{{url}}\n",
@@ -364,6 +471,7 @@
"noRoom": "هیچ جلسه‌ای برای پیوستن به آن وجود ندارد",
"numbers": "شماره‌های جلسه",
"password": "$t(lockRoomPasswordUppercase):",
"sip": "آدرس SIP",
"title": "به اشتراک گذاری",
"tooltip": "پیوند و اطلاعات تماس این جلسه را به اشتراک بگذارید",
"label": "اطلاعات جلسه"
@@ -382,6 +490,7 @@
"support": "پشتیبانی",
"supportMsg": "اگر این مشکل همچنان وجود دارد، باید"
},
"jitsiHome": "{{logo}} آرم، پیوندها به صفحه اصلی",
"keyboardShortcuts": {
"focusLocal": "تمرکز روی ویدیوی شما",
"focusRemote": "انتخاب تصویر مخاطب",
@@ -394,6 +503,7 @@
"showSpeakerStats": "نمایش آمار بلندگو",
"toggleChat": "بازکردن یا بستن گفتگو",
"toggleFilmstrip": "نمایش یا مخفی کردن ریز عکس‌های ویدیو",
"toggleParticipantsPane": "نمایش یا پنهان کردن پنل شرکت کنندگان",
"toggleScreensharing": "تغییر بین دوربین و اشتراک گذاری صفحه",
"toggleShortcuts": "نمایش یا مخفی کردن کلیدهای میانبر",
"videoMute": "شروع یا توقف دوربین"
@@ -415,6 +525,7 @@
"expandedPending": "پخش زنده در حال شروع شدن است...",
"failedToStart": "شروع پخش زنده با خطا مواجه شد",
"getStreamKeyManually": "دریافت خودکار کلید پخش زنده از یوتیوب امکانپذیر نیست، لطفا کلید پخش را به صورت دستی از یوتیوب بگیرید",
"inProgress": "ضبط در یا پخش زنده حال انجام است",
"invalidStreamKey": "کلید پخش زنده اشتباه است",
"off": "پخش زنده متوقف شد",
"offBy": "{{name}} پخش زنده را متوقف کرد",
@@ -422,6 +533,7 @@
"onBy": "{{name}} پخش زنده را آغاز کرد",
"pending": "شروع پخش زنده...",
"serviceName": "سرویس پخش زنده",
"sessionAlreadyActive": "این جلسه قبلاً در حال ضبط یا پخش زنده است.",
"signedInAs": "شما وارد شده‌اید با:",
"signIn": "ورود با گوگل",
"signInCTA": "برای وارد کردن کلید پخش زنده یوتیوب وارد شوید",
@@ -465,26 +577,41 @@
"lockRoomPasswordUppercase": "رمز عبور",
"me": "من ",
"notify": {
"allowAction": "اجازه دادن",
"allowedUnmute": "می توانید میکروفون خود را روشن کنید، دوربین خود را روشن کنید یا صفحه نمایش خود را به اشتراک بگذارید.",
"audioUnmuteBlockedTitle": "روشن کردن میکروفون مسدود شده است!",
"audioUnmuteBlockedDescription": "به دلیل محدودیت های سیستم، روشن کردن میکروفون به طور موقت مسدود شده است.",
"chatMessages": " پیام های چت",
"connectedOneMember": "{{name}} به جلسه پیوست",
"connectedThreePlusMembers": "{{name}} و {{count}} نفر دیگر به جلسه پیوستند",
"connectedTwoMembers": "{{first}} و {{second}} به جلسه پیوستند",
"disconnected": "قطع شده",
"displayNotifications": "نمایش اعلان ها برای",
"focus": "تمرکز روی کنفرانس",
"focusFail": "{{component}} در دسترس نیست {{ms}} ثانیه دیگر دوباره تلاش خواهد شد",
"grantedTo": "دسترسی مدیر به {{to}} داده شد!",
"hostAskedUnmute": "مدیر برنامه دوست دارد شما صحبت کنید",
"invitedOneMember": "{{name}} دعوت شد",
"invitedThreePlusMembers": "{{name}} و {{count}} نفر دیگر دعوت شدند",
"invitedTwoMembers": "{{first}} و {{second}} دعوت شدند",
"kickParticipant": "{{kicker}} {{kicked}} را بیرون کرد",
"leftOneMember": "{{name}} از جلسه خارج شد",
"leftThreePlusMembers": "{{name}} و بسیاری دیگر جلسه را خارج شدند",
"leftTwoMembers": "{{first}} و {{second}} جلسه را خارج شدند",
"me": "من",
"moderator": "دسترسی مدیر داده شد!",
"muted": "شما گفتگو را به صورت بی‌صدا شروع کرده‌اید",
"mutedTitle": "میکروفن شما قطع است!",
"mutedRemotelyTitle": "{{participantDisplayName}} میکروفن شما را قطع کرد!",
"mutedRemotelyDescription": "هر زمانی که خواستید صحبت کنید میکروفن خود را روشن کنید؛ بهتر است زمانی که صحبت نمی‌کنید میکروفن شما قطع باشد",
"videoMutedRemotelyTitle": "ویدیوی شما توسط {{participantDisplayName}} غیرفعال شده است",
"videoMutedRemotelyDescription": "همیشه می توانید دوباره آن را روشن کنید.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) توسط شرکت‌کننده‌ی دیگری حذف شد",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) توسط شرکت‌کننده دیگری تنظیم شد",
"raisedHand": "{{name}} می‌خواهد صحبت کند",
"raisedHands": "{{participantName}} و {{raisedHands}} نفر دیگر",
"screenShareNoAudio": "جعبه صدا را به اشتراک بگذاریدی در صفحه انتخاب پنجره علامت‌گذاری نشد.",
"screenShareNoAudioTitle": "صدای سیستم به اشتراک گذاشته نشد!",
"selfViewTitle": "شما همیشه می توانید خود مشاهده را از تنظیمات نشان دهید",
"somebody": "یک نفر",
"startSilentTitle": "شما به جلسه پیوسته‌اید اما هیچ بلندگویی برای پخش صدای جلسه یافت نشد",
"startSilentDescription": "برای فعال‌سازی صدا دوباره به جلسه بپیوندید",
@@ -497,10 +624,84 @@
"OldElectronAPPTitle": "آسیب پذیری امنیتی!",
"oldElectronClientDescription1": "به نظر می‌رسد شما از نسخه قدیمی استفاده می‌کنید که برخی آسیب‌پذیری امنیتی روی آن وجود دارد؛ لطفا از آخرین نسخه‌ی برنامه استفاده کنید",
"oldElectronClientDescription2": "آخرین نسخه",
"oldElectronClientDescription3": " الان!"
"oldElectronClientDescription3": " الان!",
"moderationInEffectDescription": "لطفا اگر می خواهید صحبت کنید، دست را بالا ببرید.",
"moderationInEffectCSDescription": "لطفاً اگر می خواهید صفحه خود را به اشتراک بگذارید، دست را بالا ببرید.",
"moderationInEffectVideoDescription": "لطفاً اگر می خواهید دوربین خود را روشن کنید، دست خود را بالا ببرید.",
"moderationInEffectTitle": "میکروفون شما توسط مدیر بی صدا شد",
"moderationInEffectCSTitle": "اشتراک‌گذاری صفحه توسط مدیر مسدود شده است ",
"moderationInEffectVideoTitle": "دوربین شما توسط مدیر مسدود شده است",
"moderationRequestFromModerator": "میزبان از شما می خواهد که میکروفون خود را روشن کنید",
"moderationRequestFromParticipant": "می خواهد صحبت کند",
"moderationStartedTitle": "اعتدال شروع شد",
"moderationStoppedTitle": "اعتدال متوقف شد",
"moderationToggleDescription": "توسط {{participantDisplayName}}",
"raiseHandAction": "دست را بلند کن",
"reactionSounds": "صداها را غیرفعال کنید",
"reactionSoundsForAll": "صداها را برای همه غیر فعال کنید",
"groupTitle": "‏‏اعلان ها",
"videoUnmuteBlockedTitle": "روشن کردن دوربین و اشتراک‌گذاری دسکتاپ مسدود شده است!",
"videoUnmuteBlockedDescription": "به دلیل محدودیت های سیستم، روشن کردن روشن کردن دوربین و اشتراک‌گذاری دسکتاپ به طور موقت مسدود شده است."
},
"participantsPane": {
"close": "بستن",
"header": "شركت كنندگان",
"headings": {
"lobby": "سالن انتظار",
"participantsList": "شرکت کنندگان در جلسه ({{count}})",
"waitingLobby": "در سالن انتظار ({{count}})"
},
"actions": {
"allow": "به شرکت کنندگان اجازه دهید:",
"allowVideo": "اجازه ویدیو",
"audioModeration": "میکروفون آنها را روشن کنید",
"blockEveryoneMicCamera": "میکروفون و دوربین همه را مسدود کنید",
"invite": "دعوت کردن افراد",
"askUnmute": "بخواهید میکروفون ها را روشن کنید",
"moreModerationActions": "گزینه های کنترل بیشتر",
"moreParticipantOptions": "گزینه های شرکت کننده بیشتر",
"mute": "بی صدا کردن ",
"muteAll": "همه را بی صدا کردن ",
"muteEveryoneElse": "بقیه را ساکت کردن ",
"stopEveryonesVideo": "ویدیوی همه را متوقف کنید",
"stopVideo": "ویدیوی متوقف کنید",
"unblockEveryoneMicCamera": "رفع انسداد همه میکروفون ها و دوربین ها",
"videoModeration": "ویدیوی آنها را شروع کنید",
"moreModerationControls": "کنترل های مدیر بیشتر"
},
"search": "جستجوی شرکت کنندگان"
},
"passwordSetRemotely": "توسط یک شرکت‌کننده دیگر تنظیم شده است",
"passwordDigitsOnly": "حداکثر {{number}} عدد",
"polls": {
"by": "توسط {{name}}",
"create": {
"addOption": "افزودن گزینه",
"answerPlaceholder": "گزینه {{index}}",
"create": "یک نظرسنجی ایجاد کنید",
"cancel": "لغو",
"pollOption": "گزینه نظرسنجی {{index}}",
"pollQuestion": "نظرسنجی",
"questionPlaceholder": "سوال بپرس",
"removeOption": "گزینه حذف",
"send": "ارسال"
},
"answer": {
"skip": "نادیده گیری",
"submit": "ارسال"
},
"results": {
"vote": "رای",
"changeVote": "تغییر رای",
"empty": "هنوز هیچ نظرسنجی در این جلسه وجود ندارد. یک نظرسنجی از اینجا شروع کنید!",
"hideDetailedResults": "پنهان سازی جزئیات",
"showDetailedResults": " نمایش جزئیات"
},
"notification": {
"title": "نظرسنجی جدیدی به این جلسه اضافه شد",
"description": "برای رای دادن، زبانه نظرسنجی ها را باز کنید"
}
},
"poweredby": "قدرت گرفته از",
"prejoin": {
"audioAndVideoError": "خطا در صدا و تصویر:",
@@ -541,6 +742,7 @@
"errorDialOutFailed": "نمی‌توان شماره‌گیری کرد؛ به خطا مواجه شد",
"errorDialOutStatus": "خطا در وضعیت شماره‌گیری",
"errorMissingName": "برای ورود به جلسه نام خود را وارد نمایید",
"errorNoPermissions": "باید دسترسی میکروفون و دوربین را فعال کنید",
"errorStatusCode": "خطا در شماره‌گیری، کد وضعیت: {{status}}",
"errorValidation": "اعتبارسنجی شماره انجام با خطا مواجه شد",
"iWantToDialIn": "می‌خواهم تماس بگیرم",
@@ -553,6 +755,7 @@
"or": "یا",
"premeeting": "پیش‌جلسه",
"showScreen": "فعالسازی صفحه پیش‌جلسه",
"keyboardShortcuts": "میانبرهای صفحه کلید را فعال کنید",
"startWithPhone": "شروع با صدای گوشی",
"screenSharingError": "خطا در اشتراک‌گذاری صفحه:",
"videoOnlyError": "خطای ویدیو:",
@@ -574,12 +777,14 @@
"ringing": "در حال زنگ زدن"
},
"profile": {
"avatar": "آواتار",
"setDisplayNameLabel": "نام نمایشی خود را وارد نمایید",
"setEmailInput": "رایانامه‌ی خود را وارد نمایید",
"setEmailLabel": "رایانامه‌ی خود را وارد نمایید",
"title": "پروفایل"
},
"raisedHand": "می‌خواهم صحبت کنم",
"raisedHandsLabel": "تعداد دست های بلند شده",
"recording": {
"limitNotificationDescriptionWeb": "با توجه به تعداد درخواست‌های بالا، ضبط جلسه به {{limit}} دقیقه محدود شده است؛ برای ضبط نامحدود <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> را ببینید",
"limitNotificationDescriptionNative": "با توجه به تعداد درخواست‌های بالا، ضبط جلسه به {{limit}} دقیقه محدود شده است؛ برای ضبط نامحدود <3>{{app}}</3> را ببینید",
@@ -588,12 +793,16 @@
"beta": "آزمایشی",
"busy": "تمامی منابع برای ضبط مشغول هستند، ما در تلاش برای آزادسازی آن‌ها هستیم؛ لطفا دقایقی دیگر مجددا تلاش نمایید",
"busyTitle": "همه‌ی ضبط کننده‌ها مشغول هستند",
"copyLink": "کپی کردن پیوند",
"error": "ضبط با خطا مواجه شد، مجددا تلاش نمایید",
"errorFetchingLink": "خطا در واکشی پیوند ضبط.",
"expandedOff": "ضبط متوقف شد",
"expandedOn": "این جلسه در حال ضبط شدن است",
"expandedPending": "ضبط آغاز شد...",
"failedToStart": "ضبط جلسه با خطا مواجه شد",
"fileSharingdescription": "به اشتراک گذاری ضبط جلسه با شرکت‌کنندگان",
"inProgress": "ضبط در یا پخش زنده حال انجام است",
"linkGenerated": "ما پیوندی برای ضبط شما ایجاد کرده ایم.",
"live": "زنده",
"loggedIn": "ورود با {{userName}}",
"off": "ضبط متوقف شد",
@@ -605,10 +814,12 @@
"serviceDescription": "ضبط جلسه توسط سرویس ضبط ذخیره خواهد شد",
"serviceDescriptionCloud": "ضبط ابری",
"serviceName": "سرویس ضبط",
"sessionAlreadyActive": "این جلسه قبلاً در حال ضبط یا پخش زنده است.",
"signIn": "ورود",
"signOut": "خروج",
"unavailable": "متاسفانه {{serviceName}} در دسترس نیست، ما در تلاش برای حل مشکل پیش آمده هستیم، مجددا تلاش نمایید",
"unavailableTitle": "امکان ضبط وجود ندارد"
"unavailableTitle": "امکان ضبط وجود ندارد",
"uploadToCloud": "آپلود در فضای ابری"
},
"sectionList": {
"pullToRefresh": "برای بازخوانی، بکشید"
@@ -616,8 +827,8 @@
"security": {
"about": "شما می‌توانید با تنظیم رمز عبور برای جلسه، شرکت کنندگان را مجبور کنید در هنگام ورود به جلسه آن را وارد کنند تا از ورود افراد ناشناس به جلسه جلوگیری شود",
"aboutReadOnly": "مدیر جلسه می‌تواند برای آن $t(lockRoomPassword) تعیین کند و شرکت‌کنندگان باید در ورود به جلسه $t(lockRoomPassword) را وارد کنند تا بتوانند در جلسه وارد شوند",
"insecureRoomNameWarning": "برای این جلسه رمز عبور تعریف نشده است و هر شرکت کننده‌ای می‌تواند به آن وارد شود",
"securityOptions": "تنظیمات امنیتی"
"header": "گزینه های امنیت",
"insecureRoomNameWarning": "برای این جلسه رمز عبور تعریف نشده است و هر شرکت کننده‌ای می‌تواند به آن وارد شود"
},
"settings": {
"calendar": {
@@ -627,8 +838,13 @@
"signedIn": "دسترسی به رویدادهای تقویم رایانامه {{email}} برقرار است",
"title": "تقویم"
},
"desktopShareFramerate": "نرخ فریم به اشتراک گذاری دسکتاپ",
"desktopShareWarning": "برای اعمال تنظیمات جدید، باید اشتراک‌گذاری صفحه را مجدداً راه‌اندازی کنید.",
"desktopShareHighFpsWarning": "نرخ فریم بالاتر برای اشتراک گذاری دسکتاپ ممکن است بر پهنای باند شما تأثیر بگذارد. برای اعمال تنظیمات جدید، باید اشتراک‌گذاری صفحه را مجدداً راه‌اندازی کنید.",
"devices": "دستگاه‌ها",
"followMe": "هرکسی که مرا دنبال می‌کند",
"framesPerSecond": "فریم در ثانیه",
"incomingMessage": "پیام ورودی",
"language": "زبان",
"loggedIn": "وارد شده با کاربری {{name}}",
"microphones": "میکروفون",
@@ -636,12 +852,21 @@
"more": "بیشتر",
"name": "نام",
"noDevice": "هیچ دستگاهی متصل نیست",
"participantJoined": "شرکت کننده ملحق شد",
"participantLeft": "شرکت کننده رفت",
"playSounds": "پخش صدا در هنگام ",
"reactions": "واکنش های ملاقات",
"sameAsSystem": "همانند سیستم ({{label}})",
"selectAudioOutput": "خروجی صدا",
"selectCamera": "دوربین",
"selectMic": "میکروفن",
"selfView": "خود مشاهده",
"sounds": "صدا",
"speakers": "بلندگوها",
"startAudioMuted": "شروع با صدای قطع شده",
"startReactionsMuted": "واکنش های صداها را برای همه بی صدا کنید",
"startVideoMuted": "شروع با حالت بدون تصویر",
"talkWhileMuted": "وقتی میکروفون خاموش است صحبت کنید",
"title": "تنظیمات"
},
"settingsView": {
@@ -672,12 +897,20 @@
},
"speaker": "بلندگو",
"speakerStats": {
"angry": "عصبانی",
"disgusted": "منزجر کرده ",
"fearful": "ترسناک",
"happy": "خوشحال",
"hours": "{{count}} ساعت",
"minutes": "{{count}} دقیقه",
"name": "نام",
"neutral": "خنثی",
"sad": "غمگین",
"search": "جستجو",
"seconds": "{{count}} ثانیه",
"speakerTime": "مدت زمان",
"speakerStats": "میزان گفتگو",
"speakerTime": "مدت زمان"
"surprised": "غافلگیر"
},
"startupoverlay": {
"policyText": "تمامی حقوق سامانه برای ببین محفوظ است",
@@ -693,9 +926,12 @@
"accessibilityLabel": {
"audioOnly": "تغییر به حالت فقط صدا",
"audioRoute": "دستگاه صدا را انتخاب کنید",
"boo": "صورت اخم",
"breakoutRoom": "به یک گروه کوچک بپیوندید یا ترک کنید",
"callQuality": "مدیریت کیفیت تماس",
"cc": "تغییر زیر نویس‌ها",
"chat": "تعویض پنجره چت",
"clap": "کف زدن",
"document": "تعویض سند به اشتراک گذاشته شده",
"download": "دانلود برنامه",
"embedMeeting": "جلسه درون برنامه‌ای",
@@ -706,6 +942,8 @@
"help": "راهنما",
"invite": "دعوت کردن",
"kick": "بیرون کردن",
"laugh": "خنده",
"like": "دوست داشتن ",
"lobbyButton": "فعال/غیرفعال کردن حالت لابی",
"localRecording": "تغییر تنظیمات کنترل ضبط",
"lockRoom": "تعویض رمز عبور جلسه",
@@ -713,35 +951,53 @@
"moreActionsMenu": "منوی عملیات‌های بیشتر",
"moreOptions": "نمایش عملیات‌های بیشتر",
"mute": "تغییر قطع صدا",
"muteEveryone": "قطع صدای همه",
"muteEveryone": "همه را بی صدا کنید",
"muteEveryoneElse": "بقیه را بی صدا کنید",
"muteEveryonesVideoStream": "ویدیوی همه را متوقف کنید",
"muteEveryoneElsesVideoStream": "ویدیوی دیگران را متوقف کنید",
"participants": "شرکت کنندگان",
"pip": "تعویض حالت تصویر در تصویر",
"privateMessage": "ارسال پیام خصوصی",
"profile": "ویرایش پروفایل",
"raiseHand": "تغییر بالا بردن دست",
"reactionsMenu": "منوی واکنش ها باز کردن/ بستن",
"recording": "تغییر ضبط",
"remoteMute": "بی‌صدا کردن شرکت کننده",
"remoteVideoMute": "دوربینی شرکت کننده را غیرفعال کردن",
"security": "گزینه‌های امنیتی",
"Settings": "تغییر تنظیمات",
"shareaudio": "صدا را به اشتراک بگذارید",
"sharedvideo": "تغییر اشتراک گذاری ویدیو یوتیوب",
"shareRoom": "دعوت دیگران",
"shareYourScreen": "تغییر اشتراک گذاری صفحه",
"shortcuts": "تغییر کلیدهای میانبر",
"show": "نمایش روی صحنه",
"silence": "سکوت",
"speakerStats": "تغییر آمار بلندگو",
"surprised": "غافلگیر شده",
"tileView": "تغییر نمای کاشی",
"toggleCamera": "تغییر دوربین",
"toggleFilmstrip": "تعویض فیلم",
"videomute": "تغییر ویدیوی بیصدا",
"videoblur": "تغییر تار کردن ویدیو"
"videoblur": "تغییر تار کردن ویدیو",
"selectBackground": "انتخاب پس زمینه",
"expand": "باز کردن",
"collapse": "بستن"
},
"addPeople": "اضافه کردن افراد به تماس",
"audioSettings": "تنظیمات صدا",
"videoSettings": "تنظیمات ویدئو",
"audioOnlyOff": "غیرفعال کردن حالت پهنای باند کم",
"audioOnlyOn": "فعال کردن حالت پهنای باند کم",
"audioRoute": "دستگاه صدا را انتخاب کنید",
"authenticate": "احراز هویت",
"boo": "صورت اخم",
"callQuality": "مدیریت کیفیت ویدیو",
"chat": "باز/بستن گفتگو",
"clap": "کف زدن",
"closeChat": "بستن گفتگو",
"closeReactionsMenu": "منوی واکنش ها بستن",
"disableReactionSounds": "می‌توانید صداهای واکنش را برای این جلسه غیر فعال کنید",
"documentClose": "بستن سند به اشتراک گذاشته شده",
"documentOpen": "باز کردن سند به اشتراک گذاشته شده",
"download": "دانلود برنامه",
@@ -755,6 +1011,10 @@
"hangup": "ترک کردن جلسه",
"help": "راهنما",
"invite": "دعوت کردن",
"joinBreakoutRoom": "گروهی کوچک بپیوندید",
"laugh": "خنده",
"leaveBreakoutRoom": "گروهی کوچک ترک کنید",
"like": "دوست داشتن ",
"lobbyButtonDisable": "غیرفعال کردن حالت لابی",
"lobbyButtonEnable": "فعال کردن حالت لابی",
"login": "ورود",
@@ -764,6 +1024,7 @@
"moreOptions": "گزینه‌های بیشتر",
"mute": "با صدا/بی صدا",
"muteEveryone": "قطع صدای همه",
"muteEveryonesVideo": "تمام دوربین های دیگر را غیرفعال کنید",
"noAudioSignalTitle": "هیچ صدایی از میکروفن شما دریافت نشد!",
"noAudioSignalDesc": "اگر خودتان صدای آن را از تنظیمات سیستم یا سخت‌افزاری قطع نکرده‌اید، به فکر تعویض آن باشید",
"noAudioSignalDescSuggestion": "اگر خودتان صدای آن را از تنظیمات سیستم یا سخت‌افزاری قطع نکرده‌اید، باید میکروفن خود را تعویض کنید",
@@ -772,28 +1033,39 @@
"noisyAudioInputTitle": "میکروفون شما سر و صدا ایجاد می‌کند!",
"noisyAudioInputDesc": "میکروفون شما سر و صدا ایجاد می‌کند، لطفا آن را بررسی کرده یا تعویض کنید",
"openChat": "باز کردن گفتگو",
"openReactionsMenu": "منوی واکنش ها باز کردن",
"participants": "شرکت کنندگان",
"pip": "ویرایش حالت تصویر در تصویر",
"privateMessage": "ارسال پیام خصوصی",
"profile": "ویرایش پروفایل",
"raiseHand": "بلند کردن دست یا پایین آوردن",
"raiseYourHand": "بلند کردن دست",
"reactionBoo": "ارسال صورت اخم شده واکنش",
"reactionClap": "ارسال کف زدنه واکنش",
"reactionLaugh": "ارسال خنده واکنش",
"reactionLike": "ارسال شست بالا واکنش",
"reactionSilence": "ارسال سکوت واکنش",
"reactionSurprised": "ارسال غافلگیر شده واکنش",
"security": "گزینه‌های امنیتی",
"Settings": "تنظیمات",
"shareaudio": "صدا را به اشتراک بگذارید",
"sharedvideo": "به اشتراک گذاری ویدیوی یوتیوب",
"shareRoom": "دعوت دیگران",
"shortcuts": "کلیدهای میانبر",
"silence": "سکوت",
"speakerStats": "میزان گفتگوی افراد",
"startScreenSharing": "شروع به اشتراک گذاری صفحه",
"startSubtitles": "شروع زیرنویس",
"stopAudioSharing": "اشتراک گذاری صدا را متوقف کنید",
"stopScreenSharing": "توقف به اشتراک گذاری صفحه",
"stopSubtitles": "توقف زیرنویس",
"stopSharedVideo": "توقف ویدیوی یوتیوب",
"surprised": "غافلگیر شده ",
"talkWhileMutedPopup": "می‌خواهید صحبت کنید؟ صدای شما قطع است.",
"tileViewToggle": "تغییر نمای کاشی",
"toggleCamera": "تغییر دوربین",
"videomute": "شروع / توقف دوربین",
"startvideoblur": "محو کردن پس زمینه",
"stopvideoblur": "نمایش پس زمینه"
"selectBackground": "انتخاب پس زمینه"
},
"transcribing": {
"ccButtonTooltip": "شروع/توقف زیرنویس",
@@ -819,6 +1091,7 @@
"react-nativeGrantPermissions": "هنگامی که مرورگر دسترسی میکروفن و دوربین را درخواست کرد، گزینه‌ی <b><i>Allow</i></b> را انتخاب نمایید",
"safariGrantPermissions": "هنگامی که مرورگر دسترسی میکروفن و دوربین را درخواست کرد، گزینه‌ی <b><i>Ok</i></b> را انتخاب نمایید"
},
"volumeSlider": "تنظیم‌گر میزان صدا",
"videoSIPGW": {
"busy": "ما در حال آزادسازی منابع هستیم، لطفا دقایقی دیگر دوباره تلاش کنید",
"busyTitle": "سرویس در حال حاضر مشغول است",
@@ -830,7 +1103,10 @@
"pending": "{{displayName}} دعوت شده است"
},
"videoStatus": {
"adjustFor": "تنظیم برای:",
"audioOnly": "صدا",
"bestPerformance": "بهترین عملکرد",
"highestQuality": "کیفیت بالاترین",
"audioOnlyExpanded": "شما در حالت پهنای باند پایین هستید، در این حالت فقط صدا و به اشتراک گذاری صفحه امکانپذیر است",
"callQuality": "کیفیت ویدیو",
"hd": "کیفیت بالا",
@@ -841,6 +1117,7 @@
"ld": "کیفیت پایین",
"ldTooltip": "ویدیو با کیفیت پایین",
"lowDefinition": "کیفیت پایین",
"performanceSettings": "تنظیمات عملکرد",
"sd": "کیفیت متوسط",
"sdTooltip": "ویدیو با کیفیت متوسط",
"standardDefinition": "کیفیت متوسط"
@@ -848,21 +1125,26 @@
"videothumbnail": {
"connectionInfo": "اطلاعات انصال",
"domute": "قطع صدا",
"domuteOthers": "قطع صدای همه بجز",
"domuteVideo": "دوربین را غیر فعال کنید",
"domuteOthers": "بقیه را ساکت کردن",
"domuteVideoOfOthers": "تمام دوربین های دیگر را غیرفعال کنید",
"flip": "تلنگر",
"grantModerator": "اعطای دسترسی مدیر",
"hideSelfView": "خود مشاهده پنهان کردن",
"kick": "بیرون انداختن",
"moderator": "مدیر",
"mute": "شرکت کننده بیصدا است",
"muted": "بیصدا",
"videoMuted": "دوربین غیرفعال است",
"remoteControl": "شروع/توقف کنترل از دور",
"show": "نمایش روی صحنه",
"videomute": "شرکت کننده دوربین را متوقف کرده است"
},
"welcomepage": {
"addMeetingName": "نام جلسه را اضافه کنید",
"accessibilityLabel": {
"join": "برای وصل شدن کلیک کنید",
"roomname": "نام اتاق را وارد کنید"
"roomname": "نام جلسه را وارد کنید"
},
"appDescription": "ما از طریق مشاوره، آموزش و پشتیبانی، تجربه‌های خود را در اختیار شما قرار می دهیم و در کنار میزبانی رویدادهای آنلاین،\nشما را در برگزاری هرچه بهتر وبینارها، دوره‌های آموزشی آنلاین، جلسات وب‌کنفرانس و پخش زنده اینترنتی برنامه‌ها همراهی\nمیکنیم",
"audioVideoSwitch": {
@@ -881,6 +1163,9 @@
"info": "اطلاعات",
"join": "ایجاد / اتصال",
"jitsiOnMobile": "نسخه‌ی موبایلی را دانلود کرده و از برگزاری جلسات در لذت ببرید",
"mobileDownLoadLinkIos": "دانلود اپلیکیشن موبایل برای iOS",
"mobileDownLoadLinkAndroid": "دانلود اپلیکیشن موبایل برای اندروید",
"mobileDownLoadLinkFDroid": "دانلود اپلیکیشن موبایل برای F-Droid",
"moderatedMessage": "یا <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">نشانی اینترنتی جلسه را رزرو کنید</a> تا در آن فقط شما مدیر جلسه باشید",
"privacy": "حریم خصوصی",
"recentList": "جدید",
@@ -888,21 +1173,37 @@
"recentListEmpty": "لیست جلسات اخیر شما خالی است، می‌توانید همه جلسات خود را اینجا برگزار کنید",
"reducedUIText": "به {{app}} خوش آمدید!",
"roomNameAllowedChars": "نام جلسه نباید شامل هیچیک از این حروف باشد: ?, &, :, ', \", %, #.",
"roomname": "نام اتاق را وارد کنید",
"roomnameHint": "برای اتاق گفتگو یک نام وارد کنید، افرادی که بخواهند وارد این گفتکو شوند باید این نام را وارد کنند",
"roomname": "نام جلسه را وارد کنید",
"roomnameHint": "برای جلسه گفتگو یک نام وارد کنید، افرادی که بخواهند وارد این گفتکو شوند باید این نام را وارد کنند",
"sendFeedback": "ارسال بازخورد",
"startMeeting": "شروع گفتگو",
"terms": "اصطلاحات",
"title": "سامانه ویدیو کنفرانس و گفتگوی ببین؛ امن، یکپارچه و پایدار"
"title": "سامانه ویدیو کنفرانس و گفتگوی ببین؛ امن، یکپارچه و پایدار",
"logo": {
"calendar": "لوگوی تقویم",
"microsoftLogo": "آرم Microsoft",
"logoDeepLinking": "لوگوی Jitsi Meet",
"desktopPreviewThumbnail": "تصویر کوچک پیش نمایش دسکتاپ",
"googleLogo": "لوگوی گوگل",
"policyLogo": "لوگوی خط مشی"
}
},
"lonelyMeetingExperience": {
"button": "دعوت از دیگران",
"youAreAlone": "شما در جلسه تنها هستید"
},
"termsView": {
"header": "شرایط"
},
"privacyView": {
"header": "حریم خصوصی"
},
"helpView": {
"header": "مرکز راهنما"
},
"lobby": {
"admit": "پذیرفتن",
"admitAll": "پذیرفتن همه",
"knockingParticipantList": "Knocking لیست شرکت‌کنندگان",
"allow": "اجازه دادن",
"backToKnockModeButton": "بدون رمز عبور، برای پیوستن درخواست دهید",
@@ -915,6 +1216,7 @@
"enableDialogText": "در حالت لابی جلسات شما محافظت شده هستند و فقط افرادی می‌توانند در جلسه شرکت کنند که توسط مدیر تایید شده باشند",
"enterPasswordButton": "رمز عبور جلسه را وارد نمایید",
"enterPasswordTitle": "برای پیوستن به جلسه رمز عبور آن را وارد نمایید",
"errorMissingPassword": "لطفا رمز عبور جلسه را وارد کنید",
"invalidPassword": "رمز عبور نامعتبر است",
"joiningMessage": "به محض پذیرش درخواست شما، به جلسه خواهید پیوست",
"joinWithPasswordMessage": "تلاش برای پیوستن به جلسه با رمز عبور، شکیبا باشید...",
@@ -933,6 +1235,7 @@
"passwordField": "رمز عبور جلسه را وارد نمایید",
"passwordJoinButton": "پیوستن",
"reject": "رد کردن",
"rejectAll": "همه رد کردن",
"toggleLabel": "فعال کردن حالت لابی"
}
}
}

View File

@@ -40,20 +40,25 @@
"audioOnly": "Bande passante faible"
},
"blankPage": {
"meetingEnded": "Réunion terminée."
"meetingEnded": "Réunion terminée."
},
"breakoutRooms": {
"defaultName": "Salle annexe #{{index}}",
"mainRoom": "Salle principale",
"actions": {
"add": "Ajouter salle annexe",
"autoAssign": "Assigner automatiquement aux salles annexes",
"close": "Fermer",
"join": "Rejoindre",
"leaveBreakoutRoom": "Quitter la salle annexe",
"more": "Plus",
"remove": "Supprimer",
"sendToBreakoutRoom": "Envoyer le participant dans:"
"add": "Ajouter salle annexe",
"autoAssign": "Assigner automatiquement aux salles annexes",
"close": "Fermer",
"join": "Rejoindre",
"leaveBreakoutRoom": "Quitter la salle annexe",
"more": "Plus",
"remove": "Supprimer",
"sendToBreakoutRoom": "Envoyer le participant dans:"
},
"notifications": {
"joinedTitle": "Salles annexes",
"joined": "Entrée en salle annexe \"{{name}}\"",
"joinedMainRoom": "Retour à la salle principalem"
}
},
"calendarSync": {
@@ -175,7 +180,8 @@
"joinInApp": "Rejoindre la réunion en utilisant l'application",
"launchWebButton": "Lancer dans le navigateur",
"title": "Lancement de votre réunion dans {{app}} en cours ...",
"tryAgainButton": "Réessayez sur le bureau"
"tryAgainButton": "Réessayez sur le bureau",
"unsupportedBrowser": "Il semble que vous utilisez un navigateur non supporté."
},
"defaultLink": "ex. {{url}}",
"defaultNickname": "ex. Jean Dupont",
@@ -239,8 +245,8 @@
"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",
"IamHost": "Je suis l'hôte",
"hideShareAudioHelper": "Ne pas montrer ce dialogue à nouveau",
"IamHost": "Je suis l'hôte",
"incorrectRoomLockPassword": "Mot de passe incorrect",
"incorrectPassword": "Nom d'utilisateur ou mot de passe incorrect",
"internalError": "Oups ! Quelque chose s'est mal passée. L'erreur suivante s'est produite : {{error}}",
@@ -256,8 +262,8 @@
"lockMessage": "Impossible de verrouiller la conférence.",
"lockRoom": "Ajouter un $t(lockRoomPassword) à la réunion ",
"lockTitle": "Échec du verrouillage",
"login": "Connexion",
"logoutQuestion": "Voulez-vous vraiment vous déconnecter et arrêter la conférence ?",
"login": "Connexion",
"logoutTitle": "Déconnexion",
"maxUsersLimitReached": "Le nombre maximal de participants est atteint. Le conférence est complète. Merci de contacter l'organisateur de la réunion ou réessayer plus tard !",
"maxUsersLimitReachedTitle": "Le nombre maximal de participants est atteint",
@@ -335,7 +341,7 @@
"sessionRestarted": "L'appel est relancé par la passerelle",
"Share": "Partager",
"shareAudio": "Continuer",
"shareAudioTitle" : "Comment partager le son",
"shareAudioTitle": "Comment partager le son",
"shareAudioWarningTitle": "Vous devez cesser de partager l'écran avant de partager l'audio",
"shareAudioWarningH1": "Si vous voulez partager uniquement de l'audio:",
"shareAudioWarningD1": "vous devez cesser le partage d'écran avant de partager votre son.",
@@ -403,16 +409,17 @@
"none": "Rien",
"uploadedImage": "Image téléversée {{index}}",
"deleteImage": "Supprimer l'image",
"image1" : "Plage",
"image2" : "Mur blanc neutre",
"image3" : "Pièce vide blanche",
"image4" : "Lampadaire noir",
"image5" : "Montagne",
"image6" : "Forêt ",
"image7" : "Lever de soleil",
"image1": "Plage",
"image2": "Mur blanc neutre",
"image3": "Pièce vide blanche",
"image4": "Lampadaire noir",
"image5": "Montagne",
"image6": "Forêt ",
"image7": "Lever de soleil",
"desktopShareError": "Impossible de créer le partage de bureau",
"desktopShare":"Partage de bureau",
"desktopShare": "Partage de bureau",
"webAssemblyWarning": "WebAssembly non supporté",
"webAssemblyWarningDescription": "WebAssembly invalidé ou non supporté par ce navigateur",
"backgroundEffectError": "Erreur dans l'application de l'effet d'arrière-plan."
},
"feedback": {
@@ -440,7 +447,7 @@
"country": "Pays",
"dialANumber": "Pour rejoindre votre réunion, composez l'un de ces numéros, puis saisissez le code confidentiel.",
"dialInConferenceID": "PIN :",
"copyNumber":"Copier le numéro",
"copyNumber": "Copier le numéro",
"dialInNotSupported": "Désolé, l'accès par téléphone n'est pas pris en charge pour l'instant.",
"dialInNumber": "Composer :",
"dialInSummaryError": "Erreur lors de la récupération des informations de numérotation. Veuillez réessayer plus tard.",
@@ -574,10 +581,12 @@
"allowedUnmute": "Vous pouvez réactiver votre écran, votre caméra ou partager votre écran.",
"audioUnmuteBlockedTitle": "Rétablissement du son bloqué !",
"audioUnmuteBlockedDescription": "Le rétablissement du son a été bloqué temporairement en raison de limites système.",
"chatMessages": "Messages de chat",
"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",
"disconnected": "déconnecté",
"displayNotifications": "Afficher les notifications pour",
"focus": "Focus de conférence",
"focusFail": "{{component}} n'est pas disponible - réessayez dans {{ms}} sec",
"hostAskedUnmute": "Le modérateur souhaite vous donner la parole",
@@ -585,6 +594,9 @@
"invitedThreePlusMembers": "{{name}} et {{count}} autres ont été invités",
"invitedTwoMembers": "{{first}} et {{second}} ont été invités",
"kickParticipant": "{{kicked}} a été expulsé par {{kicker}}",
"leftOneMember": "{{name}} a quitté la réunion",
"leftThreePlusMembers": "{{name}} et beaucoup d'autres ont quitté la réunion",
"leftTwoMembers": "{{first}} et {{second}} ont quitté la réunion",
"me": "Moi",
"moderator": "Droits modérateur accordés !",
"muted": "Vous avez commencé la conversation en muet.",
@@ -596,8 +608,10 @@
"passwordRemovedRemotely": "Le $t(lockRoomPassword) a été supprimé par un autre participant",
"passwordSetRemotely": "Un $t(lockRoomPassword) a été défini par un autre participant",
"raisedHand": "{{name}} aimerait prendre la parole.",
"raisedHands": "{{participantName}} et {{raisedHands}} autres personnes",
"screenShareNoAudio": " La case Partager l'audio n'a pas été cochée dans l'écran de sélection de la fenêtre.",
"screenShareNoAudioTitle": "La case Partager l'audio n'a pas été cochée",
"selfViewTitle": "Vous pouvez toujours rétablir l'affichage de votre propre vidéo dans les paramètres",
"somebody": "Quelqu'un",
"startSilentTitle": "Vous avez rejoint sans sortie audio !",
"startSilentDescription": "Rejoignez la réunion de nouveau pour activer l'audio",
@@ -624,6 +638,7 @@
"moderationToggleDescription": "par {{participantDisplayName}}",
"raiseHandAction": "Lever la main",
"reactionSounds": "Bloquer les réactions sonores",
"reactionSoundsForAll": "Bloquer les réactions sonores pour tous",
"groupTitle": "Notifications",
"videoUnmuteBlockedTitle": "Rétablissement de la caméra bloqué !",
"videoUnmuteBlockedDescription": "Le rétablissement de la vidéo a été bloqué temporairement en raison de limites système."
@@ -639,7 +654,7 @@
"actions": {
"allow": "Autoriser les participants à:",
"allowVideo": "permettre la vidéo",
"audioModeration": "ouvrir leur micro",
"audioModeration": "Rouvrir leur micro",
"blockEveryoneMicCamera": "Bloquer tous les micros et caméras",
"invite": "Inviter quelqu'un",
"askUnmute": "Demander de réactiver le micro",
@@ -651,7 +666,8 @@
"stopEveryonesVideo": "Couper toutes les caméras",
"stopVideo": "Couper la vidéo",
"unblockEveryoneMicCamera": "Débloquer tous les micros et caméras",
"videoModeration": "Démarrer leur vidéo"
"videoModeration": "Démarrer leur vidéo",
"moreModerationControls": "Options de modération supplémentaires"
},
"search": "Rechercher des participants"
},
@@ -664,8 +680,8 @@
"answerPlaceholder": "Option {{index}}",
"create": "Créer un sondage",
"cancel": "Annuler",
"pollOption" : "Option {{index}}",
"pollQuestion" : "Question du sondage",
"pollOption": "Option {{index}}",
"pollQuestion": "Question du sondage",
"questionPlaceholder": "Poser une question",
"removeOption": "Supprimer l'option",
"send": "Envoyer"
@@ -739,8 +755,8 @@
"or": "ou",
"premeeting": "Pré-séance",
"showScreen": "Activer l'écran de pré-séance",
"keyboardShortcuts": "Activer les raccourcis clavier",
"startWithPhone": "Commencez avec l'audio du téléphone",
"keyboardShortcuts" : "Activer les raccourcis clavier",
"screenSharingError": "Erreur de partage d'écran:",
"videoOnlyError": "Erreur vidéo:",
"videoTrackError": "Impossible de créer une piste vidéo.",
@@ -768,6 +784,7 @@
"title": "Profil"
},
"raisedHand": "Aimerait prendre la parole",
"raisedHandsLabel": "Nombre de mains levées",
"recording": {
"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>.",
"limitNotificationDescriptionNative": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <3> {{app}} </3>.",
@@ -810,8 +827,8 @@
"security": {
"about": "Vous pouvez ajouter un mot de passe à votre réunion. Les participants devront fournir le mot de passe avant de pouvoir rejoindre la réunion.",
"aboutReadOnly": "Les modérateurs peuvent ajouter un mot de passe à la réunion. Les participants devront fournir le mot de passe avant de pouvoir rejoindre la réunion.",
"insecureRoomNameWarning": "Le nom de la salle est peu sûr. Des participants non désirés peuvent rejoindre votre réunion. Pensez à sécuriser votre réunion en cliquant sur le bouton de sécurité.",
"securityOptions": "Options de sécurité"
"header": "Options de sécurité",
"insecureRoomNameWarning": "Le nom de la salle est peu sûr. Des participants non désirés peuvent rejoindre votre réunion. Pensez à sécuriser votre réunion en cliquant sur le bouton de sécurité."
},
"settings": {
"calendar": {
@@ -843,9 +860,11 @@
"selectAudioOutput": "Sortie audio",
"selectCamera": "Caméra",
"selectMic": "Microphone",
"selfView": "Affichage de votre propre vidéo",
"sounds": "Sons",
"speakers": "Haut-parleurs",
"startAudioMuted": "Tout le monde commence en muet",
"startReactionsMuted": "Tout le monde commence avec les réactions sonores bloquées",
"startVideoMuted": "Tout le monde commence sans vidéo",
"talkWhileMuted": "vous parlez en étant muet",
"title": "Paramètres"
@@ -878,20 +897,20 @@
},
"speaker": "Haut-parleur",
"speakerStats": {
"search": "Recherche",
"angry": "En colère",
"disgusted": "Dégoûté",
"fearful": "Effrayé",
"happy": "Content",
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "Nom",
"seconds": "{{count}}s",
"speakerStats": "Statistiques de l'interlocuteur",
"speakerTime": "Temps de l'interlocuteur",
"happy": "Content",
"neutral": "Indifférent",
"sad": "Triste",
"surprised": "Surpris",
"angry": "En colère",
"fearful": "Effrayé",
"disgusted": "Dégoûté"
"search": "Recherche",
"seconds": "{{count}}s",
"speakerTime": "Temps de l'interlocuteur",
"speakerStats": "Statistiques de l'interlocuteur",
"surprised": "Surpris"
},
"startupoverlay": {
"policyText": " ",
@@ -934,8 +953,8 @@
"mute": "Activer / Désactiver l'audio",
"muteEveryone": "Couper le micro de tout le monde",
"muteEveryoneElse": "Couper le micro de tous les autres",
"muteEveryonesVideo": "Couper la caméra de tout le monde",
"muteEveryoneElsesVideo": "Couper la caméra de tout les autres",
"muteEveryonesVideoStream": "Couper la caméra de tout le monde",
"muteEveryoneElsesVideoStream": "Couper la caméra de tous les autres",
"participants": "Participants",
"pip": "Activer / Désactiver le mode Picture in Picture",
"privateMessage": "Envoyer un message privé",
@@ -1111,6 +1130,7 @@
"domuteVideoOfOthers": "Couper la caméra des autres",
"flip": "Balancer",
"grantModerator": "Donner des droits de modérateur",
"hideSelfView": "Cacher l'affichage de votre propre vidéo",
"kick": "Exclure",
"moderator": "Modérateur",
"mute": "Un participant a coupé son micro",
@@ -1159,13 +1179,13 @@
"startMeeting": "Démarrer la conférence",
"terms": "Termes",
"title": "Système de vidéoconférence sécurisé, riche en fonctionnalités et gratuit",
"logo":{
"calendar":"Logo Calendar",
"microsoftLogo":"Logo Microsoft",
"logoDeepLinking":"Logo Jitsi meet",
"desktopPreviewThumbnail":"Miniature d'aperçu du bureau",
"googleLogo":"Logo Google",
"policyLogo":"Logo de la politique"
"logo": {
"calendar": "Logo Calendar",
"microsoftLogo": "Logo Microsoft",
"logoDeepLinking": "Logo Jitsi meet",
"desktopPreviewThumbnail": "Miniature d'aperçu du bureau",
"googleLogo": "Logo Google",
"policyLogo": "Logo de la politique"
}
},
"lonelyMeetingExperience": {

View File

@@ -7,11 +7,11 @@
"copyStream": "Link naar livestream kopiëren",
"countryNotSupported": "Deze bestemming wordt nog niet ondersteund.",
"countryReminder": "Belt u buiten de Verenigde Staten? Vergeet dan niet met de landcode te beginnen.",
"defaultEmail": "Uw Standaard Email",
"defaultEmail": "Uw standaard e-mail",
"disabled": "U kunt geen personen uitnodigen.",
"failedToAdd": "Het toevoegen van deelnemers is mislukt",
"footerText": "Uitgaande oproepen zijn uitgeschakeld.",
"googleEmail": "Google Email",
"googleEmail": "Google e-mail",
"inviteMoreHeader": "U bent de enige in de vergadering",
"inviteMoreMailSubject": "Deelnemen aan {{appName}}-vergadering",
"inviteMorePrompt": "Nodig meer personen uit",
@@ -21,7 +21,7 @@
"loadingPeople": "Personen om uit te nodigen aan het zoeken",
"noResults": "Geen resultaten die overeenkomen met de zoekopdracht",
"noValidNumbers": "Voer een telefoonnummer in",
"outlookEmail": "Outlook Email",
"outlookEmail": "Outlook e-mail",
"searchNumbers": "Telefoonnummers toevoegen",
"searchPeople": "Personen zoeken",
"searchPeopleAndNumbers": "Personen zoeken of hun telefoonnummers toevoegen",
@@ -30,7 +30,7 @@
"shareStream": "Deel de link naar de livestream",
"telephone": "Telefoon: {{number}}",
"title": "Personen uitnodigen voor deze vergadering",
"yahooEmail": "Yahoo Email"
"yahooEmail": "Yahoo e-mail"
},
"audioDevices": {
"bluetooth": "Bluetooth",
@@ -73,9 +73,17 @@
"titleWithPolls": "Voer een bijnaam in om chat te gebruiken"
},
"privateNotice": "Privébericht aan {{recipient}}",
"title": "Chat",
"titleWithPolls": "Chat",
"you": "u"
"message": "Bericht",
"messageAccessibleTitle": "{{user}} zegt:",
"messageAccessibleTitleMe": "ik zeg:",
"smileysPanel": "Smiley paneel",
"tabs": {
"chat": "Gesprek",
"polls": "Peilingen"
},
"title": "Gesprek",
"titleWithPolls": "Gesprek",
"you": "U"
},
"chromeExtensionBanner": {
"installExtensionText": "Installeer de extensie voor Google Calendar en Office 365 integratie",
@@ -526,6 +534,35 @@
},
"passwordSetRemotely": "ingesteld door een andere deelnemer",
"passwordDigitsOnly": "Maximaal {{number}} cijfers",
"polls": {
"by": "Door {{ name }}",
"create": {
"addOption": "Voeg optie toe",
"answerPlaceholder": "Optie {{index}}",
"create": "Creeër een peiling",
"cancel": "Annuleer",
"pollOption" : "Peiling optie {{index}}",
"pollQuestion" : "Peiling vraag",
"questionPlaceholder": "Stel een vraag",
"removeOption": "Verwijder optie",
"send": "Verstuur"
},
"answer": {
"skip": "Sla over",
"submit": "Verzend"
},
"results": {
"vote": "Stem",
"changeVote": "Verander stem",
"empty": "Er zijn nog geen peilingen in deze vergadering. Start hier een peiling!",
"hideDetailedResults": "Verberg details",
"showDetailedResults": "Toon details"
},
"notification": {
"title": "Een nieuwe peiling is aangemaakt in deze vergadering",
"description": "Open het peilingen tabblad om te stemmen"
}
},
"poweredby": "mogelijk gemaakt door",
"prejoin": {
"audioAndVideoError": "Audio- en videofout:",
@@ -586,8 +623,8 @@
},
"profile": {
"setDisplayNameLabel": "Uw weergavenaam instellen",
"setEmailInput": "Voer emailadres in",
"setEmailLabel": "Uw Gravatar email instellen",
"setEmailInput": "Voer e-mailadres in",
"setEmailLabel": "Uw Gravatar e-mail instellen",
"title": "Profiel"
},
"raisedHand": "Zou graag willen spreken",
@@ -849,17 +886,21 @@
"pending": "{{displayName}} is uitgenodigd"
},
"videoStatus": {
"adjustFor": "Aanpassen voor:",
"audioOnly": "AUD",
"audioOnlyExpanded": "U bent in lage bandbreedte-modus. In deze modus ontvangt u alleen audio en schermdeling.",
"bestPerformance": "Beste prestatie",
"callQuality": "Videokwaliteit",
"hd": "HD",
"hdTooltip": "U bekijkt video in hoge resolutie",
"highDefinition": "Hoge resolutie",
"highestQuality": "Hoogste kwaliteit",
"labelTooiltipNoVideo": "Geen video",
"labelTooltipAudioOnly": "Lage bandbreedte-modus ingeschakeld",
"ld": "LD",
"ldTooltip": "U bekijkt video in lage resolutie",
"lowDefinition": "Lage resolutie",
"performanceSettings": "Prestatie instellingen",
"sd": "SD",
"sdTooltip": "U bekijkt video in standaard resolutie",
"standardDefinition": "Standaard resolutie"
@@ -931,7 +972,7 @@
"dialogTitle": "Lobby-modus",
"disableDialogContent": "Lobby-modus is momenteel ingeschakeld. Deze functie zorgt ervoor dat ongewenste deelnemers niet aan uw vergadering kunnen deelnemen. Wilt u het uitschakelen?",
"disableDialogSubmit": "Uitschakelen",
"emailField": "Voer uw emailadres in",
"emailField": "Voer uw e-mailadres in",
"enableDialogPasswordField": "Stel wachtwoord in (optioneel)",
"enableDialogSubmit": "Inschakelen",
"enableDialogText": "Met de lobby-modus kunt u uw vergadering beveiligen, door deelnemers alleen toe te laten na een formele goedkeuring van een moderator.",

View File

@@ -158,7 +158,8 @@
"joinInApp": "Rejónher la conferéncia en utilizant laplicacion",
"launchWebButton": "Lançar del navigador",
"title": "Aviada de vòstra conferéncia dins {{app}}…",
"tryAgainButton": "Tornar ensajar del burèu"
"tryAgainButton": "Tornar ensajar del burèu",
"unsupportedBrowser": "Sembla quutilizatz un navigador que prenèm pas en carga."
},
"defaultLink": "ex. {{url}}",
"defaultNickname": "ex. Joan Delpuèch",
@@ -421,7 +422,7 @@
"noPassword": "Pas cap",
"noRoom": "Cap de sala pas donada per la jónher.",
"numbers": "Sonar de numèros",
"password": "$t(lockRoomPasswordUppercase):",
"password": "$t(lockRoomPasswordUppercase): ",
"title": "Partejar",
"tooltip": "Partejar lo ligam e las informacions daquesta conferéncia",
"copyNumber": "Copiar lo numèro",
@@ -627,9 +628,17 @@
"moderationInEffectCSDescription": "Volgatz levar la man se volètz partejar vòstre ecran.",
"moderationInEffectVideoDescription": "Volgatz levar la man se volètz aviar vòstra camèra.",
"audioUnmuteBlockedTitle": "Restabliment del son del microfòn blocat!",
"videoUnmuteBlockedTitle": "Restabliment de la camèra blocat!",
"videoUnmuteBlockedTitle": "Restabliment de la camèra e del partiment de burèu blocat !",
"audioUnmuteBlockedDescription": "Las operacion de restabliment del son microfòn son estadas blocadas pel moment a causa de limitas sistèma.",
"videoUnmuteBlockedDescription": "Las operacion de restabliment de la camèra son estadas blocadas pel moment a causa de limitas sistèma."
"videoUnmuteBlockedDescription": "Las operacion de restabliment de la camèra e del partiment del burèu son estadas blocadas pel moment a causa de limitas sistèma.",
"chatMessages": "Messatges del chat",
"displayNotifications": "Afichar las notificacions per",
"leftOneMember": "{{name}} a quitat la conferéncia",
"leftThreePlusMembers": "{{name}} e un molon dautres an quitat la conferéncia",
"leftTwoMembers": "{{first}} e {{second}} an quitat la conferéncia",
"raisedHands": "{{participantName}} e {{raisedHands}} autres",
"selfViewTitle": "Podètz totjorn quitar damagar vòstra pròpria vista a partir dels paramètres",
"reactionSoundsForAll": "Desactivar los sons per totes"
},
"passwordDigitsOnly": "Fins a {{number}} chifras",
"passwordSetRemotely": "causit per qualqu'un mai",
@@ -758,7 +767,7 @@
"about": "Podètz ajustar un $t(lockRoomPassword) per rejónher una conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans dobténer lautorizacion de dintrar dins la conferéncia.",
"aboutReadOnly": "Los participants que son moderators pòdon ajustar un $t(lockRoomPassword) a la conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans daver lautorizacion de rejónher la conferéncia.",
"insecureRoomNameWarning": "Lo nom de la sala es pas segur. De monde indesirables poirián rejónher vòstra conferéncia.",
"securityOptions": "Opcions de seguretat"
"header": "Opcions de seguretat"
},
"settings": {
"calendar": {
@@ -795,7 +804,9 @@
"talkWhileMuted": "Parlar en mut",
"desktopShareHighFpsWarning": "Una frequéncia dimatge mai nauta pel partiment burèu pòt afectar la benda passanta. Devètz reaviar lo partiment decran per aplicar los paramètres novèls.",
"desktopShareWarning": "Devètz reaviar lo partiment decran per prendre en compte las modificacions.",
"incomingMessage": "Messatge dintrant"
"incomingMessage": "Messatge dintrant",
"selfView": "Vista de se",
"startReactionsMuted": "Començan totes amb las reaccions sonòras amudidas"
},
"settingsView": {
"advanced": "Avançat",
@@ -898,7 +909,6 @@
"clap": "Picar de las mans",
"laugh": "Rire",
"like": "Levar lo det gròs",
"muteEveryonesVideo": "Copar la vidèo del monde",
"muteEveryoneElsesVideo": "Copar la vidèo de los demai",
"participants": "Participants",
"remoteVideoMute": "Copar la camèra del participant",
@@ -910,7 +920,9 @@
"collapse": "Plegar",
"muteEveryoneElse": "Copar lo microfòn dels autres",
"reactionsMenu": "Dobrir / Tampar lo menú de reaccions",
"breakoutRoom": "Rejónher/quitar la sala de reünion"
"breakoutRoom": "Rejónher/quitar la sala de reünion",
"muteEveryoneElsesVideoStream": "Arrestar la vidèo de totes los autres",
"muteEveryonesVideoStream": "Arrestar la vidèo de tot lo monde"
},
"addPeople": "Ajustar de monde a vòstra sonada",
"audioOnlyOff": "Desactivar lo mòde connexion febla",
@@ -1064,7 +1076,8 @@
"videomute": "Lo participant a arrestat la camèra",
"domuteVideo": "Desactivar la camèra",
"domuteVideoOfOthers": "Desactivar la camèra dels demai",
"videoMuted": "Camèra desactivada"
"videoMuted": "Camèra desactivada",
"hideSelfView": "Amagar pròpria vista"
},
"welcomepage": {
"accessibilityLabel": {
@@ -1135,7 +1148,8 @@
"image6": "Forèst ",
"desktopShareError": "Creacion impossibla dun partiment de burèu",
"desktopShare": "Partiment de burèu",
"webAssemblyWarning": "WebAssembly pas pres en carga"
"webAssemblyWarning": "WebAssembly pas pres en carga",
"webAssemblyWarningDescription": "WebAssembly es desactivat o pas pres en carga per aqueste navigador"
},
"participantsPane": {
"headings": {
@@ -1160,7 +1174,8 @@
"videoModeration": "Aviar lor vidèo",
"allowVideo": "Autorizar la vidèo",
"moreModerationActions": "Mai dopcions de moderacion",
"moreParticipantOptions": "Mai dopcions de participant"
"moreParticipantOptions": "Mai dopcions de participant",
"moreModerationControls": "Opcions de moderacion suplementàrias"
},
"search": "Cercar participants"
},
@@ -1207,7 +1222,12 @@
"autoAssign": "Atribucion auto a las salas de reünion"
},
"defaultName": "Sala de reünion #{{index}}",
"mainRoom": "Sala principala"
"mainRoom": "Sala principala",
"notifications": {
"joinedMainRoom": "Retorn a la sala principala",
"joinedTitle": "Salas suplementàrias",
"joined": "Dintrada a la sala suplementària « {{name}} »"
}
},
"privacyView": {
"header": "Confidencialitat"
@@ -1217,5 +1237,6 @@
},
"blankPage": {
"meetingEnded": "Conferéncia acabada."
}
},
"raisedHandsLabel": "Nombre de mans levadas"
}

View File

@@ -39,6 +39,28 @@
"audioOnly": {
"audioOnly": "Niska przepustowość"
},
"blankPage": {
"meetingEnded": "Spotkanie zakończone."
},
"breakoutRooms": {
"defaultName": "Pokój podgrupy #{{index}}",
"mainRoom": "Główny pokój",
"actions": {
"add": "Dodaj pokój podgrupy",
"autoAssign": "Automatycznie przypisuj do pokoi podgrup",
"close": "Blisko",
"join": "Dołącz",
"leaveBreakoutRoom": "Opuść pokój spotkań",
"more": "Więcej",
"remove": "Usuń",
"sendToBreakoutRoom": "Wyślij uczestnika do:"
},
"notifications": {
"joinedTitle": "Pokoje podgrup",
"joined": "Dołączanie do pokoju podgrup \"{{name}}\" ",
"joinedMainRoom": "Dołączanie do głównego pokoju"
}
},
"calendarSync": {
"addMeetingURL": "Dodaj odnośnik do spotkania",
"confirmAddLink": "Czy chcesz dodać odnośnik Jitsi do tego wydarzenia?",
@@ -158,7 +180,8 @@
"joinInApp": "Dołącz do spotkania używając aplikacji",
"launchWebButton": "Uruchom przez przeglądarkę",
"title": "Trwa uruchamianie Twojego spotkania w {{app}}…",
"tryAgainButton": "Spróbuj ponownie w aplikacji stacjonarnej"
"tryAgainButton": "Spróbuj ponownie w aplikacji stacjonarnej",
"unsupportedBrowser": "Wygląda na to, że używasz przeglądarki, której nie wspieramy."
},
"defaultLink": "np. {{url}}",
"defaultNickname": "np. Jan Kowalski",
@@ -206,14 +229,16 @@
"connectErrorWithMsg": "Upsss! Coś poszło nie tak i nie możemy podłączyć się do tej konferencji: {{msg}}",
"connecting": "Nawiązywanie połączenia",
"contactSupport": "Skontaktuj się ze wsparciem",
"copy": "Kopiuj",
"copied": "Skopiowano",
"copy": "Kopiuj",
"dismiss": "Odrzuć",
"displayNameRequired": "Cześć! Jak się nazywasz?",
"done": "Zrobione",
"e2eeDescription": "Szyfrowanie End-to-End jest aktualnie w fazie EKSPERYMENTALNEJ. Proszę mieć na uwadze fakt, że szyfrowanie end-to-end wyłączy oferowane przez serwer usługi takie jak: nagrywanie, streaming na żywo i dołączanie uczestników przez telefon. Proszę mieć również na uwadze fakt, że takie spotkanie będą działać tylko dla uczestników korzystających z przeglądarek wspierających wstawiane strumienie.",
"e2eeLabel": "Klucz E2EE",
"e2eeLabel": "Włącz szyfrowanie E2EE",
"e2eeDisabledDueToMaxModeDescription": "Nie można włączyć szyfrowania End-to-End z powodu dużej liczby uczestników konferencji.",
"e2eeWarning": "UWAGA: Niektórzy uczestnicy tego spotkania nie mają włączonej obsługi szyfrowania E2EE. Jeśli włączysz tą funkcję ci uczestnicy nie będą mieli z tobą kontaktu.",
"e2eeWillDisableDueToMaxModeDescription": "UWAGA: Szyfrowanie typu end-to-end zostanie automatycznie wyłączone, jeśli do konferencji dołączy więcej uczestników.",
"enterDisplayName": "Wpisz tutaj swoje imię",
"embedMeeting": "Osadź spotkanie",
"error": "Błąd",
@@ -249,25 +274,29 @@
"micPermissionDeniedError": "Nie udzieliłeś pozwolenia na użycie twojego mikrofonu. Nadal możesz uczestniczyc w konferencji ale inni nie będą cię słyszeli. Użyj przycisku kamera aby to naprawić.",
"micTimeoutError": "Nie udało się uruchomić źródła dźwięku. Przekroczono limit czasu",
"micUnknownError": "Z nieznanej przyczyny nie można użyć mikrofonu.",
"moderationAudioLabel": "Zezwalaj uczestnikom na wyłączanie wyciszenia",
"moderationVideoLabel": "Zezwalaj uczestnikom na rozpoczęcie wideo",
"muteEveryoneElseDialog": "Gdy wyciszysz wszystkich nie będziesz miał możliwości wyłączyć ich wyciszenia, ale oni będą mogli samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteEveryoneElseTitle": "Wyciszyć wszystkich za wyjątkiem {{whom}}?",
"muteEveryoneElsesVideoDialog": "Po dezaktywacji kamery nie można jej ponownie aktywować, ale uczestnicy mogą to zmienić samodzielnie w dowolnym momencie.",
"muteEveryoneDialog": "Uczestnicy mogą w dowolnym momencie wyłączyć wyciszenie.",
"muteEveryoneDialogModerationOn": "Uczestnicy mogą w każdej chwili wysłać prośbę o zabranie głosu.",
"muteEveryoneTitle": "Wyciszyć wszystkich?",
"muteEveryoneElsesVideoDialog": "Po wyłączeniu kamery nie będzie można go ponownie włączyć, ale można go ponownie włączyć w dowolnym momencie.",
"muteEveryoneElsesVideoTitle": "Wyłączyć kamerę wszystkim oprócz {{whom}}?",
"muteEveryonesVideoDialog": "Czy na pewno chcesz wyłączyć kamery wszystkich uczestników? Nie możesz ponownie włączyć kamer, ale uczestnicy mogą to zmienić samodzielnie w dowolnym momencie.",
"muteEveryonesVideoDialog": "Uczestnicy mogą w każdej chwili włączyć swoje wideo.",
"muteEveryonesVideoDialogModerationOn": "Uczestnicy mogą w dowolnym momencie wysłać prośbę o włączenie ich wideo.",
"muteEveryonesVideoDialogOk": "Wyłącz",
"muteEveryonesVideoTitle": "Wyłączyć kamery pozostałych uczestników?",
"muteEveryoneDialog": "Czy na pewno wyciszyć wszystkich? Nie będziesz miał możliwości wyłączyć ich wyciszenia, ale oni będą mogli samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteEveryoneTitle": "Wyciszyć wszystkich?",
"muteEveryoneSelf": "siebie",
"muteEveryoneStartMuted": "Od tego momentu wszyscy są wyciszeni",
"muteParticipantBody": "Nie możesz wyłączyć ich wyciszenia, ale oni mogą samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteParticipantButton": "Wycisz",
"muteParticipantDialog": "Czy na pewno wyciszyć tego uczestnika? Nie będziesz mógł wyłączyć wyciszenia uczestników, ale oni mogą samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteParticipantsVideoDialog": "Czy na pewno chcesz wyłączyć kamerę tego uczestnika? Nie będziesz mógł ponownie włączyć jego kamery, ale będzie on mógł samodzielnie włączyć kamerę w dowolnym momencie.",
"muteParticipantTitle": "Wyciszyć tego uczestnika?",
"muteParticipantsVideoDialogModerationOn": "Czy na pewno chcesz wyłączyć kamerę tego uczestnika? Nie będziesz w stanie ponownie włączyć aparatu i oni też nie.",
"muteParticipantsVideoButton": "Wyłącz kamerę",
"muteParticipantsVideoTitle": "Wyłączyć kamerę tego uczestnika?",
"muteParticipantsVideoBody": "Nie będziesz mógł włączyć jego kamery ponownie, ale uczestnik samodzielnie może włączyć kamerę w dowolnym momencie.",
"muteParticipantsVideoBodyModerationOn": "Nie będziesz w stanie ponownie włączyć kamery i oni też nie.",
"noDropboxToken": "Brak poprawnego tokenu Dropbox",
"Ok": "OK",
"password": "$t(lockRoomPasswordUppercase)",
@@ -329,6 +358,7 @@
"shareScreenWarningH1": "Kiedy chcesz udostępniać wyłącznie swój ekran:",
"shareScreenWarningD1": "musisz zatrzymać udostępnianie dźwięku przed udostępnieniem ekranu.",
"shareScreenWarningD2": "musisz zatrzymać udostępnianie dźwięku, rozpocząć udostępnianie ekranu i zaznaczyć opcję \"udostępnij dźwięk\".",
"sharedVideoLinkPlaceholder": "Link do YouTube lub bezpośredni link do wideo",
"stopLiveStreaming": "Zatrzymaj transmisję na żywo",
"stopRecording": "Zatrzymaj nagrywanie",
"stopRecordingWarning": "Naprawdę chcesz zatrzymać nagrywanie?",
@@ -388,7 +418,9 @@
"image7": "Wschód słońca",
"desktopShareError": "Nie można udostępnić pulpitu",
"desktopShare": "Udostępnianie pulpitu",
"webAssemblyWarning": "WebAssembly nie jest obsługiwany"
"webAssemblyWarning": "WebAssembly nie jest obsługiwany",
"webAssemblyWarningDescription": "WebAssembly wyłączony lub nieobsługiwany przez tę przeglądarkę",
"backgroundEffectError": "Nie udało się zastosować efektu tła."
},
"feedback": {
"average": "Średnio",
@@ -493,6 +525,7 @@
"expandedPending": "Transmisja na żywo rozpoczyna się…",
"failedToStart": "Transmitowanie na żywo nie uruchomiło się",
"getStreamKeyManually": "Nie byliśmy w stanie pobrać żadnych transmisji na żywo. Spróbuj uzyskać klucz do transmisji na żywo z YouTube.",
"inProgress": "Trwa nagrywanie lub transmisja na żywo",
"invalidStreamKey": "Klucz transmisji na żywo może być nieprawidłowy.",
"off": "Transmitowanie na żywo zostało zatrzymane",
"offBy": "{{name}} zatrzymał transmisję na żywo",
@@ -500,6 +533,7 @@
"onBy": "{{name}} rozpoczął transmisję na żywo",
"pending": "Start strumieniowania live…",
"serviceName": "Usługa transmisji na żywo",
"sessionAlreadyActive": "Ta sesja jest już nagrywana lub transmitowana na żywo.",
"signedInAs": "Jesteś obecnie zalogowany jako:",
"signIn": "Zaloguj się z Google",
"signInCTA": "Zaloguj się lub wpisz swój klucz do transmisji na żywo YouTube.",
@@ -543,18 +577,24 @@
"lockRoomPasswordUppercase": "Hasło",
"me": "to ja",
"notify": {
"allowAction": "Zezwól",
"allowedUnmute": "Możesz wyłączyć wyciszenie mikrofonu, uruchomić aparat lub udostępnić ekran.",
"audioUnmuteBlockedTitle": "Zablokowano wyciszenie mikrofonu!",
"audioUnmuteBlockedDescription": "Operacja wyłączania wyciszenia mikrofonu została tymczasowo zablokowana z powodu ograniczeń systemu.",
"connectedOneMember": "{{name}} dołączył do spotkania",
"connectedThreePlusMembers": "{{name}} i {{count}} innych osób dołączyło do spotkania",
"connectedTwoMembers": "{{first}} i {{second}} dołączyli do spotkania",
"disconnected": "Rozłączono",
"focus": "Fokus konferencji",
"focusFail": "{{component}} jest niedostępny - ponowienie w ciągu {{ms}} sec",
"grantedTo": "Prawa moderatora przyznane dla {{to}}!",
"hostAskedUnmute": "Gospodarz prosi Cię o wyłączenie wyciszenia",
"invitedOneMember": "{{name}} został zaproszony",
"invitedThreePlusMembers": "{{name}} i {{count}} innych osób zostało zaproszone",
"invitedTwoMembers": "{{first}} i {{second}} zostali zaproszeni",
"kickParticipant": "{{kicked}} został usunięty przez {{kicker}}",
"leftOneMember": "{{name}} opuścił spotkanie",
"leftThreePlusMembers": "{{name}} i wielu innych opuściło spotkanie",
"leftTwoMembers": "{{first}} i {{second}} opuścił spotkanie",
"me": "To ja",
"moderator": "Prawa moderatora przydzielone!",
"muted": "Rozpoczęto wyciszenie konwersacji.",
@@ -566,8 +606,10 @@
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) usunięte przez innego uczestnika",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) ustawiony przez innego uczestnika",
"raisedHand": "{{name}} chce mówić.",
"raisedHands": "{{participantName}} i {{raisedHands}} więcej osób",
"screenShareNoAudio": "Opcja \"Udostępnij dźwięk\" nie została zaznaczona podczas wyboru okna.",
"screenShareNoAudioTitle": "Nie można udostępnić dźwięku",
"selfViewTitle": "Zawsze możesz odkryć własny podgląd w ustawieniach",
"somebody": "Ktoś",
"startSilentTitle": "Dołączyłeś bez wyjścia dźwiękowego!",
"startSilentDescription": "Ponownie dołącz do spotkania, aby włączyć dźwięk",
@@ -594,7 +636,10 @@
"moderationToggleDescription": "przez {{participantDisplayName}}",
"raiseHandAction": "Podnieś rękę",
"reactionSounds": "Wyłącz dźwięki",
"groupTitle": "Powiadomienia"
"reactionSoundsForAll": "Wyłącz dźwięki dla wszystkich",
"groupTitle": "Powiadomienia",
"videoUnmuteBlockedTitle": "Wyłączenie wyciszenia kamery i udostępnianie pulpitu zablokowane!",
"videoUnmuteBlockedDescription": "Operacje wyłączania wyciszenia kamery i udostępniania pulpitu zostały tymczasowo zablokowane z powodu ograniczeń systemu."
},
"participantsPane": {
"close": "Zamknij",
@@ -606,21 +651,28 @@
},
"actions": {
"allow": "Zezwól uczestnikom na:",
"allowVideo": "Zezwól na wideo",
"audioModeration": "Wyłącz wyciszenie",
"blockEveryoneMicCamera": "Zablokuj wszystkim kamerę i mikrofon",
"invite": "Zaproś",
"askUnmute": "Poproś o wyłączenie wyciszenia",
"moreModerationActions": "Więcej opcji moderatora",
"moreParticipantOptions": "Więcej opcji dla uczestników",
"mute": "Wycisz",
"muteAll": "Wycisz wszystkich",
"muteEveryoneElse": "Wycisz pozostałych",
"startModeration": "Wyłącz wyciszenie lub rozpocznij wideo",
"stopEveryonesVideo": "Wyłącz wszystkie kamery",
"stopVideo": "Wyłącz kamerę",
"unblockEveryoneMicCamera": "Odblokuj wszystkim kamerę i mikrofon"
}
"unblockEveryoneMicCamera": "Odblokuj wszystkim kamerę i mikrofon",
"videoModeration": "Włącz kamerę",
"moreModerationControls": "Więcej kontroli moderacji"
},
"search": "Wyszukaj uczestników"
},
"passwordSetRemotely": "wybrane przez innego uczestnika",
"passwordSetRemotely": "Ustawione przez innego uczestnika",
"passwordDigitsOnly": "Do {{number}} cyfr",
"polls": {
"by": "Przez {{ name }}",
"create": {
"addOption": "Dodaj opcję",
"answerPlaceholder": "Opcja {{index}}",
@@ -688,6 +740,7 @@
"errorDialOutFailed": "Nie udało się wybrać numeru. Połączenie nieudane",
"errorDialOutStatus": "Błąd podczas uzyskiwania stanu połączenia",
"errorMissingName": "Podaj imię, aby dołączyć do spotkania",
"errorNoPermissions": "Musisz włączyć dostęp do mikrofonu i kamery",
"errorStatusCode": "Błąd wybierania, kod statusu: {{status}}",
"errorValidation": "Weryfikacja numeru zakończona niepowodzeniem",
"iWantToDialIn": "Chcę się wdzwonić",
@@ -745,6 +798,7 @@
"expandedPending": "Nagrywanie się rozpoczyna…",
"failedToStart": "Nagrywanie nie jest możliwe",
"fileSharingdescription": "Udostępnij nagranie uczestnikom spotkania",
"inProgress": "Trwa nagrywanie lub transmisja na żywo",
"linkGenerated": "Wygenerowano link do nagrania.",
"live": "NA ŻYWO",
"loggedIn": "Zalogowano jako {{userName}}",
@@ -757,6 +811,7 @@
"serviceDescription": "Twoje nagranie zostanie zapisane przez usługę nagrywania",
"serviceDescriptionCloud": "Nagrywanie w chmurze",
"serviceName": "Usługa nagrywania",
"sessionAlreadyActive": "Ta sesja jest już nagrywana lub transmitowana na żywo.",
"signIn": "Zaloguj się",
"signOut": "Wyloguj się",
"unavailable": "Ups! {{serviceName}} w tej chwili niedostępny. Próbujemy rozwiązać ten problem. Spróbuj ponownie później.",
@@ -769,8 +824,8 @@
"security": {
"about": "Możesz dodać $t(lockRoomPassword) do spotkania. Uczestnicy będą musieli wprowadzić $t(lockRoomPassword) przed dołączeniem do spotkania.",
"aboutReadOnly": "Uczestnicy posiadający uprawnienia do moderacji mogą ustawić $t(lockRoomPassword) do spotkania. Uczestnicy będą musieli wprowadzić $t(lockRoomPassword) zanim zostaną dołączeni do spotkania.",
"insecureRoomNameWarning": "Nazwa pokoju nie jest bezpieczna. Niepowołaniu uczestnicy mogą dołączyć do spotkania. Proszę rozważyć ustawienie hasła spotkania używając przycisku Opcje zabezpieczeń.",
"securityOptions": "Opcje zabezpieczeń"
"header": "Opcje zabezpieczeń",
"insecureRoomNameWarning": "Nazwa pokoju nie jest bezpieczna. Niepowołaniu uczestnicy mogą dołączyć do spotkania. Proszę rozważyć ustawienie hasła spotkania używając przycisku Opcje zabezpieczeń."
},
"settings": {
"calendar": {
@@ -790,7 +845,6 @@
"language": "Język",
"loggedIn": "Zalogowano jako {{name}}",
"microphones": "Mikrofony",
"sounds": "Dźwięki",
"moderator": "Moderacja",
"more": "Więcej",
"name": "Nazwa",
@@ -803,8 +857,11 @@
"selectAudioOutput": "Wyjście audio",
"selectCamera": "Kamera",
"selectMic": "Mikrofon",
"selfView": "Własnego podgląd",
"sounds": "Dźwięki",
"speakers": "Głośniki",
"startAudioMuted": "Wycisz wszystkich dołączających",
"startReactionsMuted": "Wycisz dźwięki reakcji dla wszystkich",
"startVideoMuted": "Ukryj wszystkich dołączających",
"talkWhileMuted": "Jesteś wyciszony",
"title": "Ustawienia"
@@ -837,13 +894,20 @@
},
"speaker": "Mówca",
"speakerStats": {
"search": "Wyszukaj",
"angry": "Zły",
"disgusted": "Oburzony",
"fearful": "Przerażony",
"happy": "Szczęśliwy",
"hours": "{{count}} godz.",
"minutes": "{{count}} min.",
"name": "Nazwa",
"neutral": "Neutralny",
"sad": "Smutny",
"search": "Wyszukaj",
"seconds": "{{count}} sek.",
"speakerTime": "Czas mówcy",
"speakerStats": "Statystyki mówców",
"speakerTime": "Czas mówcy"
"surprised": "Zdziwiony"
},
"startupoverlay": {
"policyText": " ",
@@ -860,6 +924,7 @@
"audioOnly": "Przełączanie tylko audio",
"audioRoute": "Wybierz urządzenie dźwiękowe",
"boo": "Buczenie",
"breakoutRoom": "Dołącz/opuść pokój podgrupy",
"callQuality": "Zarządzanie jakością obrazu",
"cc": "Przełączanie napisów",
"chat": "Przełączanie okna rozmowy",
@@ -943,7 +1008,9 @@
"hangup": "Opuść spotkanie",
"help": "Pomoc",
"invite": "Zaproś uczestników",
"joinBreakoutRoom": "Dołącz do pokoju podgrupy",
"laugh": "Śmiech",
"leaveBreakoutRoom": "Opuść pokój spotkań",
"like": "Kciuk w górę",
"lobbyButtonDisable": "Wyłącz tryb lobby",
"lobbyButtonEnable": "Włącz tryb lobby",
@@ -1033,7 +1100,10 @@
"pending": "{{displayName}} został zaproszony"
},
"videoStatus": {
"adjustFor": "Dostosuj do:",
"audioOnly": "DŹW",
"bestPerformance": "Najlepsza wydajność",
"highestQuality": "Najwyższa jakość",
"audioOnlyExpanded": "Jesteś w trybie słabego łącza. W tym trybie będziesz otrzymywać tylko dźwięk i udostępnianie ekranu.",
"callQuality": "Jakość obrazu",
"hd": "HD",
@@ -1044,6 +1114,7 @@
"ld": "LD",
"ldTooltip": "Podgląd obrazu w niskiej rozdzielczości",
"lowDefinition": "Niska rozdzielczość",
"performanceSettings": "Ustawienia wydajności",
"sd": "SD",
"sdTooltip": "Podgląd obrazu w standardowej rozdzielczości",
"standardDefinition": "Standardowa rozdzielczość"
@@ -1056,14 +1127,15 @@
"domuteVideoOfOthers": "Wyłącz kamerę pozostałym",
"flip": "Odwrócenie",
"grantModerator": "Przyznaj prawa moderatora",
"hideSelfView": "Ukryj widok własnego podglądu",
"kick": "Wyrzuć",
"moderator": "Moderator",
"mute": "Uczestnik ma wyciszone audio",
"muted": "Wyciszony",
"videoMuted": "Kamera wyłączona",
"remoteControl": "Kontrola zdalna",
"show": "Pokaż na scenie",
"videomute": "Uczestnik zatrzymał kamerę",
"videoMuted": "Kamera wyłączona"
"videomute": "Uczestnik zatrzymał kamerę"
},
"welcomepage": {
"addMeetingName": "Dodaj nazwę spotkania",

View File

@@ -13,7 +13,7 @@
"failedToAdd": "Falha ao adicionar participantes",
"footerText": "A marcação está desactivada.",
"googleEmail": "Email do Google",
"inviteMoreHeader": "Você é o único na reunião",
"inviteMoreHeader": "É o único na reunião",
"inviteMoreMailSubject": "Participar na reunião {{appName}}",
"inviteMorePrompt": "Convidar mais pessoas",
"linkCopied": "Link copiado para a área de transferência",
@@ -39,6 +39,28 @@
"audioOnly": {
"audioOnly": "Largura de banda baixa"
},
"blankPage": {
"meetingEnded": "A reunião terminou."
},
"breakoutRooms": {
"defaultName": "Sala #{{index}}",
"mainRoom": "Sala principal",
"actions": {
"add": "Adicionar salas simultâneas",
"autoAssign": "Atribuição automática de salas simultâneas",
"close": "Fechar",
"join": "Entrar na sala",
"leaveBreakoutRoom": "Sair da sala",
"more": "Mais",
"remove": "Eliminar sala",
"sendToBreakoutRoom": "Enviar participante para:"
},
"notifications": {
"joinedTitle": "Salas simultâneas",
"joined": "Entrada na sala \"{{name}}\"",
"joinedMainRoom": "Entrada na sala principal"
}
},
"calendarSync": {
"addMeetingURL": "Adicionar um link da reunião",
"confirmAddLink": "Gostaria de adicionar um link do Jitsi a esse evento?",
@@ -72,7 +94,7 @@
"privateNotice": "Mensagem privada para {{recipient}}",
"message": "Mensagem",
"messageAccessibleTitle": "{{user}} disse:",
"messageAccessibleTitleMe": "Você disse:",
"messageAccessibleTitleMe": "Eu disse:",
"smileysPanel": "Painel de Emojis",
"tabs": {
"chat": "Chat",
@@ -158,7 +180,8 @@
"joinInApp": "Participe nesta reunião utilizando a aplicação",
"launchWebButton": "Iniciar na web",
"title": "A iniciar a sua reunião na {{app}}...",
"tryAgainButton": "Tente novamente no desktop"
"tryAgainButton": "Tente novamente no desktop",
"unsupportedBrowser": "Parece que está a usar um browser que não suportamos."
},
"defaultLink": "ex.: {{url}}",
"defaultNickname": "ex.: João Pedro",
@@ -396,6 +419,7 @@
"desktopShareError": "Não foi possível partilhar a área de trabalho",
"desktopShare":"Partilhar área de trabalho",
"webAssemblyWarning": "WebAssembly não suportado",
"webAssemblyWarningDescription": "WebAssembly desactivado ou não suportado por este navegador",
"backgroundEffectError": "Falha ao aplicar efeito de fundo."
},
"feedback": {
@@ -446,7 +470,7 @@
"noPassword": "Nenhum",
"noRoom": "Não foi especificado nenhuma sala para ligar.",
"numbers": "Números para entrar por chamada telefónica",
"password": "$t(lockRoomPasswordUppercase):",
"password": "$t(lockRoomPasswordUppercase): ",
"sip": "Endereços SIP",
"title": "Partilhar",
"tooltip": "Partilhar link e acesso telefónico para esta reunião",
@@ -491,7 +515,7 @@
"busyTitle": "Todas as transmissões estão atualmente ocupadas",
"changeSignIn": "Alternar contas.",
"choose": "Escolha uma transmissão em direto",
"chooseCTA": "Escolha uma opção de transmissão. Você está conectado atualmente como {{email}}.",
"chooseCTA": "Escolha uma opção de transmissão. Está conectado atualmente como {{email}}.",
"enterStreamKey": "Insira sua chave de transmissão em direto do YouTube aqui.",
"error": "Falha na transmissão em direto. Tente de novo.",
"errorAPI": "Ocorreu um erro ao acessar suas transmissões do YouTube. Por favor tente logar novamente.",
@@ -501,6 +525,7 @@
"expandedPending": "Iniciando a transmissão em direto...",
"failedToStart": "Falha ao iniciar a transmissão em direto",
"getStreamKeyManually": "Não conseguimos buscar nenhuma transmissão em direto. Tente obter sua chave de transmissão em direto no YouTube.",
"inProgress": "Gravação ou transmissão em direto em curso",
"invalidStreamKey": "A senha para transmissão em direto pode estar incorreta.",
"off": "Transmissão em direto encerrada",
"offBy": "{{name}} parou a transmissão em direto",
@@ -508,7 +533,8 @@
"onBy": "{{name}} iniciou a transmissão em direto",
"pending": "Iniciando Transmissão em Direto...",
"serviceName": "Serviço de Transmissão em Direto",
"signedInAs": "Você está conectado como:",
"sessionAlreadyActive": "Esta sessão já está a ser gravada ou transmitida em direto.",
"signedInAs": "Está conectado como:",
"signIn": "Faça login no Google",
"signInCTA": "Faça login ou insira sua chave de transmissão em Direto do YouTube.",
"signOut": "Sair",
@@ -536,7 +562,7 @@
"engaged": "Gravação local iniciada.",
"finished": "Sessão de gravação {{token}} terminada. Por favor, envie o arquivo gravado para o moderador.",
"finishedModerator": "Sessão de gravação {{token}} terminada. A gravação da faixa local foi salva. Por favor, peça aos outros participantes para enviar suas gravações.",
"notModerator": "Você não é o moderador. Você não pode iniciar ou parar a gravação local."
"notModerator": "Não é o moderador. Não pode iniciar ou parar a gravação local."
},
"moderator": "Moderador",
"no": "Não",
@@ -553,10 +579,14 @@
"notify": {
"allowAction": "Permitir",
"allowedUnmute": "Pode ligar o seu microfone, ligar a sua câmara ou partilhar o seu ecrã.",
"audioUnmuteBlockedTitle": "Ligar microfone bloqueado!",
"audioUnmuteBlockedDescription": "A operação de ligar o microfone foi temporariamente bloqueada devido aos limites do sistema.",
"chatMessages": "Mensagens de chat",
"connectedOneMember": "{{name}} entrou na reunião",
"connectedThreePlusMembers": "{{name}} e muitos outros entraram na reunião",
"connectedTwoMembers": "{{first}} e {{second}} entraram na reunião",
"disconnected": "desconectado",
"displayNotifications": "Mostrar notificações para",
"focus": "Foco da conferência",
"focusFail": "{{component}} não disponĩvel - tente em {{ms}} seg.",
"hostAskedUnmute": "O moderador gostaria que você falasse",
@@ -564,10 +594,13 @@
"invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados",
"invitedTwoMembers": "{{first}} e {{second}} foram convidados",
"kickParticipant": "{{kicked}} foi expulso por {{kicker}}",
"leftOneMember": "{{name}} deixou a reunião",
"leftThreePlusMembers": "{{name}} e muitos outros deixaram a reunião",
"leftTwoMembers": "{{first}} e {{second}} deixaram a reunião",
"me": "Eu",
"moderator": "É agora um moderador",
"muted": "Você iniciou uma conversa com o microfone desativado.",
"mutedTitle": "Você está silenciado!",
"muted": "Iniciou uma conversa com o microfone desativado.",
"mutedTitle": "Está silenciado!",
"mutedRemotelyTitle": "Foi silenciado pelo {{participantDisplayName}}",
"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.",
"videoMutedRemotelyTitle": "A sua câmara foi desligada pelo {{participantDisplayName}}.",
@@ -575,10 +608,12 @@
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removido por outro participante",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) definido por outro participante",
"raisedHand": "Gostaria de falar.",
"raisedHands": "{{participantName}} e mais {{raisedHands}} pessoas",
"screenShareNoAudio": " A caixa de compartilhar áudio não foi marcada no ecrã de seleção da janela.",
"screenShareNoAudioTitle": "Não foi possível partilhar o áudio do sistema!",
"selfViewTitle": "Pode sempre reexibir a autovisualização a partir das definições",
"somebody": "Alguém",
"startSilentTitle": "Você entrou sem saída de áudio!",
"startSilentTitle": "Entrou sem saída de áudio!",
"startSilentDescription": "Volte à reunião para habilitar o á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",
@@ -603,7 +638,10 @@
"moderationToggleDescription": "pelo {{participantDisplayName}}",
"raiseHandAction": "Levantar a mão",
"reactionSounds": "Desactivar sons",
"groupTitle": "Notificações"
"reactionSoundsForAll": "Desativar sons para todos",
"groupTitle": "Notificações",
"videoUnmuteBlockedTitle": "Está bloqueado ligar a câmara e partilhar o ambiente de trabalho!",
"videoUnmuteBlockedDescription": "A operação de ligar a câmara e partilhar o ambiente de trabalho foi temporariamente bloqueada devido aos limites do sistema."
},
"participantsPane": {
"close": "Fechar",
@@ -616,18 +654,20 @@
"actions": {
"allow": "Permitir aos participantes:",
"allowVideo": "Permitir vídeo",
"audioModeration": "Ativarem o microfone deles",
"audioModeration": "Ativar o microfone deles",
"blockEveryoneMicCamera": "Bloquear o microfone e a câmara de todos",
"invite": "Convidar alguém",
"askUnmute": "Pedir para ligar o microfone",
"moreModerationActions": "Mais opções de moderação",
"moreParticipantOptions": "Mais opções de participantes",
"mute": "Silenciar",
"muteAll": "Silenciar todos",
"muteEveryoneElse": "Silenciar todos os outros",
"stopEveryonesVideo": "Desligar a câmara de todos",
"stopVideo": "Desligar a câmara",
"unblockEveryoneMicCamera": "Desbloquear o microfone e a câmara de todos",
"videoModeration": "Ligarem a câmara deles"
"videoModeration": "Ligar a câmara deles",
"moreModerationControls": "Mais controlos de moderação"
},
"search": "Pesquisar participantes"
},
@@ -744,6 +784,7 @@
"title": "Perfil"
},
"raisedHand": "Gostaria de falar",
"raisedHandsLabel": "Número de mãos levantadas",
"recording": {
"limitNotificationDescriptionWeb": "Devido à grande procura, a sua gravação será limitada a {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. Para gravações ilimitadas tente <3>{{app}}</3>.",
@@ -760,6 +801,7 @@
"expandedPending": "Iniciando gravação...",
"failedToStart": "Falha ao iniciar a gravação",
"fileSharingdescription": "Compartilhar gravação com participantes da reunião",
"inProgress": "Gravação ou transmissão em direto em curso",
"linkGenerated": "Gerámos um link para a sua gravação.",
"live": "DIRETO",
"loggedIn": "Conectado como {{userName}}",
@@ -772,6 +814,7 @@
"serviceDescription": "Sua gravação será salva pelo serviço de gravação",
"serviceDescriptionCloud": "Gravação na nuvem",
"serviceName": "Serviço de gravação",
"sessionAlreadyActive": "Esta sessão já está a ser gravada ou transmitida em direto.",
"signIn": "Entrar",
"signOut": "Sair",
"unavailable": "Oops! O {{serviceName}} está indisponível. Estamos trabalhando para resolver o problema. Por favor, tente mais tarde.",
@@ -784,8 +827,8 @@
"security": {
"about": "Pode adicionar uma $t(lockRoomPassword) à sua reunião. Os participantes terão de fornecer a $t(lockRoomPassword) antes de serem autorizados a participar na reunião.",
"aboutReadOnly": "Os participantes moderadores podem acrescentar uma $t(lockRoomPassword) à reunião. Os participantes terão de fornecer a $t(lockRoomPassword) antes de serem autorizados a participar na reunião.",
"insecureRoomNameWarning": "O nome da sala é inseguro. Participantes indesejados podem juntar-se à sua conferência. Considere proteger a sua reunião utilizando o botão de segurança.",
"securityOptions": "Opções de segurança"
"header": "Opções de segurança",
"insecureRoomNameWarning": "O nome da sala é inseguro. Participantes indesejados podem juntar-se à sua conferência. Considere proteger a sua reunião utilizando o botão de segurança."
},
"settings": {
"calendar": {
@@ -817,9 +860,11 @@
"selectAudioOutput": "Saída de áudio",
"selectCamera": "Câmara",
"selectMic": "Microfone",
"selfView": "Autovisualização",
"sounds": "Sons",
"speakers": "Participantes",
"startAudioMuted": "Todos começam com microfone desligado",
"startReactionsMuted": "Sons de reação silenciados para todos",
"startVideoMuted": "Todos começam com câmara desligada",
"talkWhileMuted": "Se fala e está com microfone desligado",
"title": "Definições"
@@ -852,13 +897,20 @@
},
"speaker": "Participante",
"speakerStats": {
"search": "Pesquisar",
"angry": "Zangado",
"disgusted": "Desgostoso",
"fearful": "Temeroso",
"happy": "Feliz",
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "Nome",
"neutral": "Neutro",
"sad": "Triste",
"search": "Pesquisar",
"seconds": "{{count}}s",
"speakerTime": "Tempo do Participante",
"speakerStats": "Estatísticas dos Participantes",
"speakerTime": "Tempo do Participante"
"surprised": "Surpreendido"
},
"startupoverlay": {
"policyText": " ",
@@ -875,6 +927,7 @@
"audioOnly": "Mudar para apenas áudio",
"audioRoute": "Selecionar o dispositivo de som",
"boo": "Vaia",
"breakoutRoom": "Entrar/Sair salas instantâneas",
"callQuality": "Gerir a qualidade do vídeo",
"cc": "Mudar legendas",
"chat": "Abrir / Fechar chat",
@@ -900,8 +953,8 @@
"mute": "Ativar / Desativar microfone",
"muteEveryone": "Silenciar a todos",
"muteEveryoneElse": "Silenciar todos os outros",
"muteEveryonesVideo": "Desativar o vídeo de todos",
"muteEveryoneElsesVideo": "Desativar o vídeo de todos os outros",
"muteEveryonesVideo": "Parar o vídeo de todos",
"muteEveryoneElsesVideo": "Parar o vídeo de todos os outros",
"participants": "Participantes",
"pip": "Mudar para o modo Picture-in-Picture",
"privateMessage": "Enviar mensagem privada",
@@ -958,7 +1011,9 @@
"hangup": "Sair da reunião",
"help": "Ajuda",
"invite": "Convidar pessoas",
"joinBreakoutRoom": "Entrar na sala",
"laugh": "Risos",
"leaveBreakoutRoom": "Sair da sala",
"like": "Aprovado",
"lobbyButtonDisable": "Desativar sala de espera",
"lobbyButtonEnable": "Ativar sala de espera",
@@ -1075,6 +1130,7 @@
"domuteVideoOfOthers": "Desactivar a câmara de todos os outros",
"flip": "Inverter",
"grantModerator": "Conceder direitos de moderador",
"hideSelfView": "Ocultar a autovisualização",
"kick": "Expulsar",
"moderator": "Moderador",
"mute": "Participante está sem som",
@@ -1090,7 +1146,7 @@
"join": "Toque para entrar",
"roomname": "Digite o nome da sala"
},
"appDescription": "Vá em frente, converse por vídeo com toda a equipa. Na verdade, convide todos os que conhece. {{app}} é uma solução de videoconferência totalmente criptografada e 100% de código aberto que você pode usar todos os dias, a cada dia, gratuitamente — sem necessidade de conta.",
"appDescription": "Vá em frente, converse por vídeo com toda a equipa. Na verdade, convide todos os que conhece. {{app}} é uma solução de videoconferência totalmente criptografada e 100% de código aberto que pode usar todos os dias, a cada dia, gratuitamente — sem necessidade de conta.",
"audioVideoSwitch": {
"audio": "Voz",
"video": "Vídeo"
@@ -1114,7 +1170,7 @@
"privacy": "Política de Privacidade",
"recentList": "Recente",
"recentListDelete": "Remover",
"recentListEmpty": "Sua lista recente está vazia. As reuniões que você realizar serão exibidas aqui.",
"recentListEmpty": "A sua lista recente está atualmente vazia. Converse com a sua equipa e encontrará aqui todas as suas reuniões recentes.",
"reducedUIText": "Bem-vindo ao {{app}}!",
"roomNameAllowedChars": "Nome da reunião não deve conter qualquer um destes caracteres: ?. &, :, ', \", %, #.",
"roomname": "Digite o nome da sala",
@@ -1136,6 +1192,12 @@
"button": "Convidar outros",
"youAreAlone": "É o único na reunião"
},
"termsView": {
"header": "Termos"
},
"privacyView": {
"header": "Privacidade"
},
"helpView": {
"header": "Centro de ajuda"
},

View File

@@ -102,10 +102,13 @@
},
"connectionindicator": {
"address": "Адрес:",
"audio_ssrc": "Аудио SSRC:",
"bandwidth": "Средняя скорость:",
"bitrate": "Битрейт:",
"bridgeCount": "Количество серверов: ",
"codecs": "Кодеки (A/V): ",
"connectedTo": "Подключен к:",
"e2e_rtt": "E2E RTT:",
"framerate": "Частота кадров:",
"less": "Краткая информация",
"localaddress_0": "Локальный адрес:",
@@ -114,6 +117,7 @@
"localport_0": "Локальный порт:",
"localport_1": "Локальных порта:",
"localport_2": "Локальных портов:",
"maxEnabledResolution": "Максимальное разрешение",
"more": "Подробная информация",
"packetloss": "Потери пакетов:",
"quality": {
@@ -130,10 +134,13 @@
"remoteport_1": "Удаленных порта:",
"remoteport_2": "Удаленных портов:",
"resolution": "Разрешение:",
"savelogs": "Сохранить логи",
"participant_id": "id участника:",
"status": "Связь:",
"transport_0": "Метод отправки:",
"transport_1": "Метода отправки:",
"transport_2": "Методов отправки:"
"transport_2": "Методов отправки:",
"video_ssrc": "Видео SSRC:"
},
"dateUtils": {
"earlier": "Ранее",
@@ -559,6 +566,30 @@
"suboptimalExperienceTitle": "Предупреждение браузера",
"unmute": "Включить микрофон"
},
"participantsPane": {
"close": "Закрыть",
"header": "Участники",
"headings": {
"lobby": "Лобби ({{count}})",
"participantsList": "Список участников ({{count}})",
"waitingLobby": "Ожидают в лобби ({{count}})"
},
"actions": {
"allow": "Разрешить",
"allowVideo": "Разрешить видео",
"audioModeration": "Разрешить выключить микрофон",
"blockEveryoneMicCamera": "Заблокировать у всех микрофон и камеру",
"invite": "Пригласить",
"askUnmute": "Попросить разрешение включить микрофон",
"mute": "Выключить звук",
"muteAll": "Выключить звук у всех",
"muteEveryoneElse": "Выключить микрофон у остальных",
"stopEveryonesVideo": "Выключить у всех камеру",
"stopVideo": "Остановить видео",
"unblockEveryoneMicCamera": "Разблокировать у всех микрофон и камеру",
"videoModeration": "Разрешить видео"
}
},
"passwordDigitsOnly": "До {{number}} цифр",
"passwordSetRemotely": "установлен другим участником",
"poweredby": "работает на",
@@ -744,7 +775,7 @@
"hangup": "Завершить звонок",
"help": "Справка",
"invite": "Пригласить",
"kick": "Выкинуть участника",
"kick": "Отключить участника",
"lobbyButton": "Вкл/Выкл режим лобби",
"localRecording": "Вкл/Выкл кнопки записи",
"lockRoom": "Установить пароль",
@@ -774,13 +805,18 @@
"videomute": "Вкл/Выкл видео"
},
"addPeople": "Добавить людей к вашему сеансу связи",
"audioSettings": "Настройка звука",
"videoSettings": "Настройка видео",
"audioOnlyOff": "Отключить режим экономии пропускной способности",
"audioOnlyOn": "Включить режим экономии пропускной способности",
"audioRoute": "Выбрать аудиоустройство",
"authenticate": "Аутентифицировать",
"boo": "Освистывать",
"callQuality": "Качество связи",
"chat": "Чат",
"clap": "Аплодисменты",
"closeChat": "Закрыть чат",
"closeReactionsMenu": "Закрыть меню реакций",
"documentClose": "Закрыть общий документ",
"documentOpen": "Открыть общий документ",
"download": "Скачать приложение",
@@ -794,6 +830,8 @@
"hangup": "Выход",
"help": "Справка",
"invite": "Пригласить",
"laugh": "Смеяться",
"like": "Мне нравится",
"lobbyButtonDisable": "Отключить режим лобби",
"lobbyButtonEnable": "Включить режим лобби",
"login": "Войти",
@@ -812,6 +850,7 @@
"noisyAudioInputTitle": "Похоже, ваш микрофон создает шум!",
"noisyAudioInputDesc": "Возможно, ваш микрофон создает шум. Вы можете выключить его или смените устройство.",
"openChat": "Открыть чат",
"openReactionsMenu": "Открыть меню реакций",
"participants": "Участники",
"pip": "Вкл режим Картинка-в-картинке",
"privateMessage": "Отправить личное сообщение",
@@ -819,9 +858,12 @@
"raiseHand": "Хочу говорить",
"raiseYourHand": "Поднять руку",
"security": "Настройки безопасности",
"selectBackground": "Выбрать фоновое изображение",
"shareRoom": "Отправить приглашение",
"shareaudio": "Предоставить доступ к звуку",
"sharedvideo": "Видео YouTube",
"shortcuts": "Комбинации клавиш",
"silence": "Молчание",
"speakerStats": "Статистика",
"startScreenSharing": "Начать трансляцию с экрана",
"startSubtitles": "Включить субтитры",
@@ -830,6 +872,7 @@
"stopSharedVideo": "Остановить видео на YouTube",
"stopSubtitles": "Отключить субтитры",
"stopvideoblur": "Отключить размытие фона",
"surprised": "Удивиться",
"talkWhileMutedPopup": "Пытаетесь говорить? У вас отключен звук.",
"tileViewToggle": "Вкл/выкл плитку",
"toggleCamera": "Переключить камеру",
@@ -887,17 +930,21 @@
"standardDefinition": "Стандартное качество (SD)"
},
"videothumbnail": {
"connectionInfo": "Информация о соединении",
"domute": "Выключить звук",
"domuteOthers": "Выключить остальных",
"domuteVideo": "Выключить видео",
"domuteOthers": "Выключить звук остальным",
"domuteVideoOfOthers": "Выключить видео остальным",
"flip": "Отразить",
"grantModerator": "Сделать модератором",
"kick": "Выкинуть",
"kick": "Отключить",
"moderator": "Модератор",
"mute": "Без звука",
"muted": "Звук выключен",
"videoMuted": "Камера выключена",
"remoteControl": "Начать / Остановить дистанционный контроль",
"show": "Показать крупным планом",
"videomute": "Участник отключил камеру"
"videomute": "Участник выключил камеру"
},
"welcomepage": {
"accessibilityLabel": {
@@ -934,4 +981,4 @@
"terms": "Условия",
"title": "Защищенная, полнофункциональная и совершенно бесплатная система видеоконференций"
}
}
}

View File

@@ -1079,7 +1079,7 @@
"title": "Delade dokument"
},
"e2ee": {
"labelToolTip": "jud- och videokommunikation för detta samtal är krypterad från dator till dator"
"labelToolTip": "Ljud- och videokommunikation för detta samtal är krypterad från dator till dator"
},
"embedMeeting": {
"title": "Bädda in möte"
@@ -1165,8 +1165,8 @@
"send": "Skicka"
},
"answer": {
"skip": "Skicka",
"submit": "Skippa"
"skip": "Skippa",
"submit": "Skicka"
},
"results": {
"vote": "Rösta",

View File

@@ -39,6 +39,28 @@
"audioOnly": {
"audioOnly": "低頻寬"
},
"blankPage": {
"meetingEnded": "會議已結束。"
},
"breakoutRooms": {
"defaultName": "分組討論室 #{{index}}",
"mainRoom": "主會議室",
"actions": {
"add": "新增討論室",
"autoAssign": "自動分配至討論室",
"close": "關閉",
"join": "加入",
"leaveBreakoutRoom": "離開討論室",
"more": "更多",
"remove": "移除",
"sendToBreakoutRoom": "將參與者移至:"
},
"notifications": {
"joinedTitle": "分組討論室",
"joined": "正在加入 \"{{name}}\" 分組討論室",
"joinedMainRoom": "正在加入主會議室"
}
},
"calendarSync": {
"addMeetingURL": "增加會議連結",
"confirmAddLink": "您要為此活動加入 Jitsi 連結嗎?",
@@ -70,13 +92,17 @@
"titleWithPolls": "輸入名稱來使用交談"
},
"privateNotice": "私人訊息傳送至 {{recipient}}",
"title": "對話",
"titleWithPolls": "對話",
"you": "您",
"message": "訊息",
"messageAccessibleTitle": "{{user}} 說:",
"messageAccessibleTitleMe": "您說:",
"smileysPanel": "表情符號面板"
"smileysPanel": "表情符號面板",
"tabs": {
"chat": "聊天",
"polls": "投票"
},
"title": "對話",
"titleWithPolls": "對話",
"you": "您"
},
"chromeExtensionBanner": {
"installExtensionText": "安裝適用於 Google 行事曆及 Office 365 整合的擴充功能",
@@ -209,7 +235,9 @@
"done": "完成",
"e2eeDescription": "端對端加密目前是實驗性功能。請注意:啟用端對端加密將停用伺服器端提供的服務,例如:錄影、直播、及電話參與。且會議將只適用於支援 Insertable Streams 的瀏覽器。",
"e2eeLabel": "啟用端對端加密",
"e2eeDisabledDueToMaxModeDescription": "由於會議中的人數過多,故無法啟用端對端加密。",
"e2eeWarning": "警告:看來不是每位此會議的參與者都有啟用端對端加密,如果您啟用了,他們可能無法看/聽到您。",
"e2eeWillDisableDueToMaxModeDescription": "警告:如果有更多參與者加入會議,端對端加密將被自動停用。",
"enterDisplayName": "請在此輸入您自己的名字",
"embedMeeting": "嵌入會議",
"error": "錯誤",
@@ -245,24 +273,30 @@
"micPermissionDeniedError": "您未取得權限使用麥克風。您仍然可參加會議,但是其他人無法聽到您。可以利用位址欄中的攝影裝置按鈕來修正。",
"micTimeoutError": "無法啟動音訊裝置。連線逾時!",
"micUnknownError": "不明原因造成麥克風無法使用。",
"moderationAudioLabel": "允許參與者自我解除靜音",
"moderationVideoLabel": "允許參與者開啟視訊",
"muteEveryoneElseDialog": "靜音後,你就不能再解除對方的靜音,但對方可以隨時解除自己的靜音狀態。",
"muteEveryoneElseTitle": "是否要讓除了 {{whom}} 以外的人靜音?",
"muteEveryoneDialog": "是否要靜音所有人?靜音後,你就不能再解除對方的靜音,但對方可以隨時解除自己的靜音狀態。",
"muteEveryoneDialogModerationOn": "參與者可以隨時傳送說話請求。",
"muteEveryoneTitle": "靜音所有人?",
"muteEveryoneElsesVideoDialog": "一旦停用,您就不能再重新開啟對方的攝影機,但對方隨時能重新開啟自己的攝影機。",
"muteEveryoneElsesVideoTitle": "是否要關閉除了 {{whom}} 以外的人的攝影機?",
"muteEveryonesVideoDialog": "您確定要停用所有人的攝影機嗎?停用後,您就無法再重新開啟,只有對方能自己重新開啟。",
"muteEveryonesVideoDialogModerationOn": "參與者可以隨時傳送開啟視訊請求。",
"muteEveryonesVideoDialogOk": "停用",
"muteEveryonesVideoTitle": "關閉所有人的攝影機?",
"muteEveryoneSelf": "您自己",
"muteEveryoneStartMuted": "現在所有人皆已靜音",
"muteParticipantBody": "您無法對他們解除靜音,但是他們自己隨時可以解除靜音。",
"muteParticipantButton": "靜音",
"muteParticipantDialog": "確定要將這位參與者設為靜音?您無法為他們解除,但他們可以隨時自行解除靜音。",
"muteParticipantTitle": "將這位參與者設為靜音?",
"muteParticipantsVideoDialog": "確定要將這位參與者設為靜音?您無法為他們解除,但他們可以隨時自行解除靜音。",
"muteParticipantsVideoDialogModerationOn": "您確定要關閉此參與者的視訊鏡頭嗎?您和他都無法再將視訊重新開啟。",
"muteParticipantsVideoButton": "停用攝影機",
"muteParticipantsVideoTitle": "停用此參與者的攝影機?",
"muteParticipantsVideoBody": "您無法重新開啟,只有對方能自己重新開啟。",
"muteParticipantsVideoBodyModerationOn": "您和他都無法再將視訊重新開啟。",
"noDropboxToken": "沒有有效的 Dropbox 權杖",
"Ok": "確定",
"password": "密碼",
"passwordLabel": "會議已被參與者鎖定。請輸入 $t(lockRoomPassword) 以加入。",
@@ -323,6 +357,7 @@
"shareScreenWarningH1": "如果您只要分享畫面:",
"shareScreenWarningD1": "您必須先停止分享音訊才能分享畫面。",
"shareScreenWarningD2": "您必須先停止分享音訊,啟動畫面分享,然後勾選 \"分享音訊\" 選項。",
"sharedVideoLinkPlaceholder": "YouTube 或影片連結",
"stopLiveStreaming": "停止直播串流",
"stopRecording": "停止錄影",
"stopRecordingWarning": "確定要停止錄影嗎?",
@@ -382,7 +417,8 @@
"image7" : "日出",
"desktopShareError": "無法建立桌面分享",
"desktopShare":"桌面分享",
"webAssemblyWarning": "不支援 WebAssembly"
"webAssemblyWarning": "不支援 WebAssembly",
"backgroundEffectError": "無法套用背景效果。"
},
"feedback": {
"average": "普通",
@@ -419,6 +455,10 @@
"invitePhone": "要用電話參加會議,請使用:{{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "要找另一組撥入號碼?\n請見會議撥入號碼{{url}}\n\n\n如果也要用室內電話撥打不用連接語音進行加入{{silentUrl}}",
"inviteSipEndpoint": "如果要透過 SIP 地址加入,請輸入:{{sipUri}}",
"inviteTextiOSPersonal": "{{name}} 邀請您加入會議。",
"inviteTextiOSJoinSilent": "如果您使用了市內電話撥入,請使用此連結來停用音訊:{{silentUrl}}。",
"inviteTextiOSInviteUrl": "點擊此連結以加入:{{inviteUrl}}。",
"inviteTextiOSPhone": "若要透過電話加入,請使用此號碼:{{number}},,{{conferenceID}}#。如果您需要其他號碼,點擊此連結以檢視完整列表:{{didUrl}}。",
"inviteURLFirstPartGeneral": "您受邀參加會議。",
"inviteURLFirstPartPersonal": "{{name}} 正在邀請您加入會議。\n",
"inviteURLSecondPart": "\n加入會議\n{{url}}\n",
@@ -483,6 +523,7 @@
"expandedPending": "直播串流正被啟動...",
"failedToStart": "直播串流啟動失敗",
"getStreamKeyManually": "我們無法解析任何直播串流,請從 YouTube 取得您的直播串流金鑰。",
"inProgress": "正在錄製或直播",
"invalidStreamKey": "直播串流金鑰可能不正確。",
"off": "直播串流已經停止",
"offBy": "{{name}} 停止了直播串流",
@@ -490,6 +531,7 @@
"onBy": "{{name}} 啟動了直播串流",
"pending": "啟動直播串流...",
"serviceName": "直播串流服務",
"sessionAlreadyActive": "已在錄製或直播此工作階段。",
"signedInAs": "您目前登入名稱為:",
"signIn": "使用 Google 帳戶登入",
"signInCTA": "輸入 YouTube 直播串流密鑰,或登入 YouTube 帳號。",
@@ -533,6 +575,10 @@
"lockRoomPasswordUppercase": "密碼",
"me": "我",
"notify": {
"allowAction": "允許",
"allowedUnmute": "您可以將麥克風解除靜音、開啟視訊,或是分享您的畫面。",
"audioUnmuteBlockedTitle": "麥克風解除靜音遭封鎖!",
"audioUnmuteBlockedDescription": "麥克風解除靜音操作由於系統限制而被暫時封鎖。",
"connectedOneMember": "{{name}} 加入了會議",
"connectedThreePlusMembers": "{{name}} 及 {{count}} 位人員加入了會議",
"connectedTwoMembers": "{{first}} 及 {{second}} 加入了會議",
@@ -545,6 +591,9 @@
"invitedThreePlusMembers": "{{name}} 及 {{count}} 位人員已受邀請",
"invitedTwoMembers": "{{first}} 及 {{second}} 已受邀請",
"kickParticipant": "{{kicked}} 已被 {{kicker}} 踢出會議",
"leftOneMember": "{{name}} 已離開會議",
"leftThreePlusMembers": "{{name}} 和其他人已離開會議",
"leftTwoMembers": "{{first}} 和 {{second}} 已離開會議",
"me": "自己",
"moderator": "主持人權限已經取得!",
"muted": "您已經啟動通話,處於靜音。",
@@ -583,26 +632,71 @@
"moderationStoppedTitle": "停止管理",
"moderationToggleDescription": "由 {{participantDisplayName}}",
"raiseHandAction": "舉手",
"groupTitle": "通知"
"reactionSounds": "停用音效",
"reactionSoundsForAll": "為所有人停用音效",
"groupTitle": "通知",
"videoUnmuteBlockedTitle": "視訊鏡頭解除靜音遭封鎖!",
"videoUnmuteBlockedDescription": "視訊鏡頭解除靜音操作由於系統限制而被暫時封鎖。"
},
"participantsPane": {
"close": "關閉",
"header": "參與者",
"headings": {
"lobby": "大廳 ({{count}})",
"participantsList": "會議參與者 ({{count}})"
"participantsList": "會議參與者 ({{count}})",
"waitingLobby": "於大廳等待 ({{count}})"
},
"actions": {
"allow": "允許參與者能夠:",
"allowVideo": "允許視訊",
"audioModeration": "自我解除靜音",
"blockEveryoneMicCamera": "封鎖所有人的麥克風和視訊鏡頭",
"invite": "邀請他人",
"askUnmute": "要求解除靜音",
"moreModerationActions": "更多管理選項",
"moreParticipantOptions": "更多參與者選項",
"mute": "靜音",
"muteAll": "靜音所有人",
"startModeration": "將他們解除靜音或開始視訊",
"muteEveryoneElse": "靜音其他人",
"stopEveryonesVideo": "停止所有人的視訊",
"stopVideo": "停止影片"
}
"stopVideo": "停止影片",
"unblockEveryoneMicCamera": "解除封鎖所有人的麥克風及視訊鏡頭",
"videoModeration": "開啟視訊",
"moreModerationControls": "更多管理控制項"
},
"search": "搜尋參與者"
},
"passwordSetRemotely": "由其他參與者設定",
"passwordDigitsOnly": "上限為 {{number}} 位數",
"polls": {
"by": "由 {{ name }}",
"create": {
"addOption": "新增選項",
"answerPlaceholder": "選項 {{index}}",
"create": "建立投票",
"cancel": "取消",
"pollOption" : "投票選項 {{index}}",
"pollQuestion" : "投票問題",
"questionPlaceholder": "詢問問題",
"removeOption": "移除選項",
"send": "傳送"
},
"answer": {
"skip": "跳過",
"submit": "提交"
},
"results": {
"vote": "投票",
"changeVote": "修改投票",
"empty": "目前會議中沒有任何投票。在這裡建立您的投票吧!",
"hideDetailedResults": "隱藏詳細資訊",
"showDetailedResults": "顯示詳細資訊"
},
"notification": {
"title": "此會議有一項新投票",
"description": "開啟投票分頁以參與投票"
}
},
"poweredby": "技術支援",
"prejoin": {
"audioAndVideoError": "音訊及視訊錯誤:",
@@ -643,6 +737,7 @@
"errorDialOutFailed": "因通話失敗而無法撥出。",
"errorDialOutStatus": "取得撥出狀態時發生錯誤",
"errorMissingName": "請輸入您的名字以加入會議",
"errorNoPermissions": "您必須啟用麥克風及視訊鏡頭存取權限",
"errorStatusCode": "撥出失敗,狀態代碼:{{status}}",
"errorValidation": "號碼驗證失敗",
"iWantToDialIn": "我想要撥入",
@@ -700,6 +795,7 @@
"expandedPending": "錄影正在啟動...",
"failedToStart": "錄影啟動失敗",
"fileSharingdescription": "分享錄影給會議參與者",
"inProgress": "正在錄製或直播",
"linkGenerated": "我們建立了您的錄影檔的連結。",
"live": "直播",
"loggedIn": "以 {{userName}} 登入",
@@ -712,6 +808,7 @@
"serviceDescription": "您的錄影會由錄影服務儲存",
"serviceDescriptionCloud": "雲端錄製",
"serviceName": "錄影服務",
"sessionAlreadyActive": "已在錄製或直播此工作階段。",
"signIn": "登入",
"signOut": "登出",
"unavailable": "喔哦!{{serviceName}} 目前無法使用。我們正在解決此問題,請稍後再試。",
@@ -741,6 +838,7 @@
"devices": "裝置",
"followMe": "全部人跟隨我",
"framesPerSecond": "幀數",
"incomingMessage": "新訊息",
"language": "語言",
"loggedIn": "以 {{name}} 登入",
"microphones": "麥克風",
@@ -748,13 +846,20 @@
"more": "更多",
"name": "名稱",
"noDevice": "無",
"participantJoined": "參與者已加入",
"participantLeft": "參與者已離開",
"playSounds": "播放音效",
"reactions": "會議反應",
"sameAsSystem": "系統預設 ({{label}})",
"selectAudioOutput": "音訊輸出",
"selectCamera": "攝影裝置",
"selectMic": "麥克風",
"sounds": "音效",
"speakers": "喇叭",
"startAudioMuted": "全部人啟動時處於靜音",
"startReactionsMuted": "為所有人關閉反應音效",
"startVideoMuted": "全部人啟動時處於隱藏",
"talkWhileMuted": "靜音時說話",
"title": "設定"
},
"settingsView": {
@@ -785,12 +890,20 @@
},
"speaker": "喇叭",
"speakerStats": {
"search": "搜尋",
"hours": "{{count}}時",
"minutes": "{{count}}分",
"name": "名稱",
"seconds": "{{count}}秒",
"speakerStats": "聲音輸出數據",
"speakerTime": "聲音輸出時間"
"speakerTime": "聲音輸出時間",
"happy": "開心",
"neutral": "中立",
"sad": "悲傷",
"surprised": "驚訝",
"angry": "憤怒",
"fearful": "害怕",
"disgusted": "作嘔"
},
"startupoverlay": {
"policyText": " ",
@@ -806,6 +919,7 @@
"accessibilityLabel": {
"audioOnly": "切換僅聲音",
"audioRoute": "選擇音訊裝置",
"boo": "喝倒彩",
"callQuality": "管理影像品質",
"cc": "切換字幕",
"chat": "切換聊天視窗",
@@ -870,11 +984,13 @@
"audioOnlyOn": "啟用低頻寬模式",
"audioRoute": "選擇音訊裝置",
"authenticate": "認證",
"boo": "喝倒彩",
"callQuality": "管理影像品質",
"chat": "開啟/關閉聊天欄",
"clap": "鼓掌",
"closeChat": "關閉聊天欄",
"closeReactionsMenu": "關閉反應選單",
"disableReactionSounds": "您可以停用此會議的反應音效",
"documentClose": "關閉分享檔案欄",
"documentOpen": "開啟分享檔案欄",
"download": "下載我們的應用程式",
@@ -888,7 +1004,9 @@
"hangup": "離開",
"help": "說明",
"invite": "邀請人員",
"joy": "高興",
"joinBreakoutRoom": "加入分組討論室",
"laugh": "大笑",
"leaveBreakoutRoom": "離開分組討論室",
"like": "比讚",
"lobbyButtonDisable": "停用大廳模式",
"lobbyButtonEnable": "啟用大廳模式",
@@ -910,17 +1028,16 @@
"openChat": "開啟聊天欄",
"openReactionsMenu": "開啟反應選單",
"participants": "參與者",
"party": "慶祝",
"pip": "進入子母畫面模式",
"privateMessage": "送私人訊息",
"privateMessage": "送私人訊息",
"profile": "編輯您的簡介",
"raiseHand": "舉手/取消請求發言",
"raiseYourHand": "舉手發言",
"raiseHand": "舉手/放下",
"raiseYourHand": "舉手",
"reactionBoo": "傳送喝倒彩反應",
"reactionClap": "傳送鼓掌反應",
"reactionJoy": "傳送高興反應",
"reactionLaugh": "傳送大笑反應",
"reactionLike": "傳送比讚反應",
"reactionParty": "傳送拉炮反應",
"reactionSmile": "傳送微笑反應",
"reactionSilence": "傳送靜默反應",
"reactionSurprised": "傳送驚訝反應",
"security": "安全性選項",
"Settings": "設定",
@@ -979,7 +1096,10 @@
"pending": "已向 {{displayName}} 發送邀請"
},
"videoStatus": {
"adjustFor": "調整:",
"audioOnly": "僅聲音",
"bestPerformance": "最佳效能",
"highestQuality": "最佳品質",
"audioOnlyExpanded": "您目前處於低頻寬模式。在此模式下您僅會收到語音及螢幕分享。",
"callQuality": "影像品質",
"hd": "HD",
@@ -990,6 +1110,7 @@
"ld": "LD",
"ldTooltip": "觀看低解析度影像",
"lowDefinition": "低解析度",
"performanceSettings": "效能設定",
"sd": "SD",
"sdTooltip": "觀看標準解析度影像",
"standardDefinition": "標準解析度"
@@ -1063,6 +1184,12 @@
"button": "邀請其他人",
"youAreAlone": "您是會議中的唯一一個人"
},
"termsView": {
"header": "條款"
},
"privacyView": {
"header": "隱私權"
},
"helpView": {
"header": "說明中心"
},
@@ -1081,6 +1208,7 @@
"enableDialogText": "大廳模式能夠保護您的會議,只有被管理員認可後才能加入會議。",
"enterPasswordButton": "輸入會議密碼",
"enterPasswordTitle": "輸入密碼以加入會議",
"errorMissingPassword": "請輸入會議密碼",
"invalidPassword": "密碼錯誤",
"joiningMessage": "一旦他人接受您的請求,即可加入會議",
"joinWithPasswordMessage": "正在嘗試透過密碼加入,請稍候...",
@@ -1099,6 +1227,7 @@
"passwordField": "輸入會議密碼",
"passwordJoinButton": "加入",
"reject": "拒絕",
"rejectAll": "拒絕所有人",
"toggleLabel": "啟用大廳"
}
}

View File

@@ -180,7 +180,8 @@
"joinInApp": "Join this meeting using the app",
"launchWebButton": "Launch in web",
"title": "Launching your meeting in {{app}}...",
"tryAgainButton": "Try again in desktop"
"tryAgainButton": "Try again in desktop",
"unsupportedBrowser": "It looks like you're using a browser we don't support."
},
"defaultLink": "e.g. {{url}}",
"defaultNickname": "ex. Jane Pink",
@@ -212,7 +213,7 @@
"cameraNotSendingData": "We are unable to access your camera. Please check if another application is using this device, select another device from the settings menu or try to reload the application.",
"cameraNotSendingDataTitle": "Unable to access camera",
"cameraPermissionDeniedError": "You have not granted permission to use your camera. You can still join the conference but others won't see you. Use the camera button in the address bar to fix this.",
"cameraTimeoutError": "Could not start video source. Timeout occured!",
"cameraTimeoutError": "Could not start video source. Timeout occurred!",
"cameraUnknownError": "Cannot use camera for an unknown reason.",
"cameraUnsupportedResolutionError": "Your camera does not support required video resolution.",
"Cancel": "Cancel",
@@ -340,7 +341,7 @@
"sessionRestarted": "Call restarted because of a connection issue.",
"Share": "Share",
"shareAudio": "Continue",
"shareAudioTitle" : "How to share audio",
"shareAudioTitle": "How to share audio",
"shareAudioWarningTitle": "You need to stop screen sharing before sharing audio",
"shareAudioWarningH1": "If you want to share just audio:",
"shareAudioWarningD1": "you need to stop screen sharing before sharing your audio.",
@@ -408,16 +409,17 @@
"none": "None",
"uploadedImage": "Uploaded image {{index}}",
"deleteImage": "Delete image",
"image1" : "Beach",
"image2" : "White neutral wall",
"image3" : "White empty room",
"image4" : "Black floor lamp",
"image5" : "Mountain",
"image6" : "Forest ",
"image7" : "Sunrise",
"image1": "Beach",
"image2": "White neutral wall",
"image3": "White empty room",
"image4": "Black floor lamp",
"image5": "Mountain",
"image6": "Forest ",
"image7": "Sunrise",
"desktopShareError": "Could not create desktop share",
"desktopShare":"Desktop share",
"webAssemblyWarning": "WebAssembly not supported",
"webAssemblyWarningDescription": "WebAssembly disabled or not supported by this browser",
"backgroundEffectError": "Failed to apply background effect."
},
"feedback": {
@@ -468,7 +470,7 @@
"noPassword": "None",
"noRoom": "No room was specified to dial-in into.",
"numbers": "Dial-in Numbers",
"password": "$t(lockRoomPasswordUppercase):",
"password": "$t(lockRoomPasswordUppercase): ",
"sip": "SIP address",
"title": "Share",
"tooltip": "Share link and dial-in info for this meeting",
@@ -579,10 +581,12 @@
"allowedUnmute": "You can unmute your microphone, start your camera or share your screen.",
"audioUnmuteBlockedTitle": "Mic unmute blocked!",
"audioUnmuteBlockedDescription": "Mic unmute operation has been temporarily blocked because of system limits.",
"chatMessages": "Chat messages",
"connectedOneMember": "{{name}} joined the meeting",
"connectedThreePlusMembers": "{{name}} and many others joined the meeting",
"connectedTwoMembers": "{{first}} and {{second}} joined the meeting",
"disconnected": "disconnected",
"displayNotifications": "Display notifications for",
"focus": "Conference focus",
"focusFail": "{{component}} not available - retry in {{ms}} sec",
"hostAskedUnmute": "The moderator would like you to speak",
@@ -605,8 +609,9 @@
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) set by another participant",
"raisedHand": "Would like to speak.",
"raisedHands": "{{participantName}} and {{raisedHands}} more people",
"screenShareNoAudio": " Share audio box was not checked in the window selection screen.",
"screenShareNoAudio": "Share audio box was not checked in the window selection screen.",
"screenShareNoAudioTitle": "Couldn't share system audio!",
"selfViewTitle": "You can always un-hide the self-view from settings",
"somebody": "Somebody",
"startSilentTitle": "You joined with no audio output!",
"startSilentDescription": "Rejoin the meeting to enable audio",
@@ -633,9 +638,10 @@
"moderationToggleDescription": "by {{participantDisplayName}}",
"raiseHandAction": "Raise hand",
"reactionSounds": "Disable sounds",
"reactionSoundsForAll": "Disable sounds for all",
"groupTitle": "Notifications",
"videoUnmuteBlockedTitle": "Camera unmute blocked!",
"videoUnmuteBlockedDescription": "Camera unmute operation has been temporarily blocked because of system limits."
"videoUnmuteBlockedTitle": "Camera unmute and desktop sharing blocked!",
"videoUnmuteBlockedDescription": "Camera unmute and desktop sharing operation have been temporarily blocked because of system limits."
},
"participantsPane": {
"close": "Close",
@@ -660,7 +666,8 @@
"stopEveryonesVideo": "Stop everyone's video",
"stopVideo": "Stop video",
"unblockEveryoneMicCamera": "Unblock everyone's mic and camera",
"videoModeration": "Start their video"
"videoModeration": "Start their video",
"moreModerationControls": "More moderation controls"
},
"search": "Search participants"
},
@@ -777,6 +784,7 @@
"title": "Profile"
},
"raisedHand": "Would like to speak",
"raisedHandsLabel": "Number of raised hands",
"recording": {
"limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}</3>.",
@@ -819,8 +827,8 @@
"security": {
"about": "You can add a $t(lockRoomPassword) to your meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.",
"aboutReadOnly": "Moderator participants can add a $t(lockRoomPassword) to the meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.",
"insecureRoomNameWarning": "The room name is unsafe. Unwanted participants may join your conference. Consider securing your meeting using the security button.",
"securityOptions": "Security options"
"header": "Security Options",
"insecureRoomNameWarning": "The room name is unsafe. Unwanted participants may join your conference. Consider securing your meeting using the security button."
},
"settings": {
"calendar": {
@@ -852,9 +860,11 @@
"selectAudioOutput": "Audio output",
"selectCamera": "Camera",
"selectMic": "Microphone",
"selfView": "Self view",
"sounds": "Sounds",
"speakers": "Speakers",
"startAudioMuted": "Everyone starts muted",
"startReactionsMuted": "Mute reaction sounds for everyone",
"startVideoMuted": "Everyone starts hidden",
"talkWhileMuted": "Talk while muted",
"title": "Settings"
@@ -887,20 +897,20 @@
},
"speaker": "Speaker",
"speakerStats": {
"search": "Search",
"angry": "Angry",
"disgusted": "Disgusted",
"fearful": "Fearful",
"happy": "Happy",
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "Name",
"seconds": "{{count}}s",
"speakerStats": "Speaker Stats",
"speakerTime": "Speaker Time",
"happy": "Happy",
"neutral": "Neutral",
"sad": "Sad",
"surprised": "Surprised",
"angry": "Angry",
"fearful": "Fearful",
"disgusted": "Disgusted"
"search": "Search",
"seconds": "{{count}}s",
"speakerTime": "Speaker Time",
"speakerStats": "Speaker Stats",
"surprised": "Surprised"
},
"startupoverlay": {
"policyText": " ",
@@ -943,8 +953,8 @@
"mute": "Mute / Unmute",
"muteEveryone": "Mute everyone",
"muteEveryoneElse": "Mute everyone else",
"muteEveryonesVideo": "Disable everyone's video",
"muteEveryoneElsesVideo": "Disable everyone else's video",
"muteEveryonesVideoStream": "Stop everyone's video",
"muteEveryoneElsesVideoStream": "Stop everyone else's video",
"participants": "Participants",
"pip": "Toggle Picture-in-Picture mode",
"privateMessage": "Send private message",
@@ -1120,12 +1130,14 @@
"domuteVideoOfOthers": "Disable camera of everyone else",
"flip": "Flip",
"grantModerator": "Grant Moderator Rights",
"hideSelfView": "Hide self view",
"kick": "Kick out",
"moderator": "Moderator",
"mute": "Participant is muted",
"muted": "Muted",
"videoMuted": "Camera disabled",
"remoteControl": "Start / Stop remote control",
"screenSharing": "Participant is sharing their screen",
"show": "Show on stage",
"videomute": "Participant has stopped the camera"
},

View File

@@ -21,6 +21,7 @@ import {
getCurrentConference,
sendTones,
setFollowMe,
setLocalSubject,
setPassword,
setSubject
} from '../../react/features/base/conference';
@@ -66,8 +67,9 @@ import { toggleLobbyMode, setKnockingParticipantApproval } from '../../react/fea
import { isForceMuted } from '../../react/features/participants-pane/functions';
import { RECORDING_TYPES } from '../../react/features/recording/constants';
import { getActiveSession } from '../../react/features/recording/functions';
import { isScreenAudioSupported } from '../../react/features/screen-share';
import { isScreenAudioSupported, isScreenVideoShared } from '../../react/features/screen-share';
import { startScreenShareFlow, startAudioScreenShareFlow } from '../../react/features/screen-share/actions';
import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture';
import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any';
import { toggleTileView, setTileView } from '../../react/features/video-layout';
import { muteAllParticipants } from '../../react/features/video-menu/actions';
@@ -135,6 +137,10 @@ function initCommands() {
sendAnalytics(createApiEvent('display.name.changed'));
APP.conference.changeLocalDisplayName(displayName);
},
'local-subject': localSubject => {
sendAnalytics(createApiEvent('local.subject.changed'));
APP.store.dispatch(setLocalSubject(localSubject));
},
'mute-everyone': mediaType => {
const muteMediaType = mediaType ? mediaType : MEDIA_TYPE.AUDIO;
@@ -470,6 +476,11 @@ function initCommands() {
return;
}
const enableScreenshotCapture = state['features/base/config'].enableScreenshotCapture;
if (enableScreenshotCapture && isScreenVideoShared(state)) {
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
}
conference.startRecording(recordingConfig);
},
@@ -498,6 +509,9 @@ function initCommands() {
const activeSession = getActiveSession(state, mode);
if (activeSession && activeSession.id) {
if (state['features/base/config'].enableScreenshotCapture) {
APP.store.dispatch(toggleScreenshotCaptureSummary(false));
}
conference.stopRecording(activeSession.id);
} else {
logger.error('No recording or streaming session found');
@@ -1470,12 +1484,14 @@ class API {
* available.
*
* @param {string} link - The recording download link.
* @param {number} ttl - The recording download link time to live.
* @returns {void}
*/
notifyRecordingLinkAvailable(link: string) {
notifyRecordingLinkAvailable(link: string, ttl: number) {
this._sendEvent({
name: 'recording-link-available',
link
link,
ttl
});
}
@@ -1509,12 +1525,14 @@ class API {
* Notify external application ( if API is enabled) that a toolbar button was clicked.
*
* @param {string} key - The key of the toolbar button.
* @param {boolean} preventExecution - Whether execution of the button click was prevented or not.
* @returns {void}
*/
notifyToolbarButtonClicked(key: string) {
notifyToolbarButtonClicked(key: string, preventExecution: boolean) {
this._sendEvent({
name: 'toolbar-button-clicked',
key
key,
preventExecution
});
}

View File

@@ -38,6 +38,7 @@ const commands = {
toggleLobby: 'toggle-lobby',
hangup: 'video-hangup',
initiatePrivateChat: 'initiate-private-chat',
localSubject: 'local-subject',
kickParticipant: 'kick-participant',
muteEveryone: 'mute-everyone',
overwriteConfig: 'overwrite-config',

8995
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@
"author": "",
"readmeFilename": "README.md",
"dependencies": {
"@amplitude/react-native": "2.3.3",
"@amplitude/react-native": "2.7.0",
"@atlaskit/button": "15.1.4",
"@atlaskit/checkbox": "12.0.0",
"@atlaskit/dropdown-menu": "10.1.2",
@@ -40,16 +40,18 @@
"@material-ui/core": "4.11.3",
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
"@microsoft/microsoft-graph-client": "1.1.0",
"@react-native-async-storage/async-storage": "1.15.5",
"@react-native-community/google-signin": "3.0.1",
"@react-native-community/netinfo": "4.1.5",
"@react-native-community/slider": "3.0.3",
"@react-native-async-storage/async-storage": "1.15.14",
"@react-native-community/clipboard": "1.5.1",
"@react-native-community/netinfo": "7.1.7",
"@react-native-community/slider": "4.1.12",
"@react-native-google-signin/google-signin": "7.0.4",
"@react-native-masked-view/masked-view": "0.2.6",
"@react-navigation/bottom-tabs": "5.11.15",
"@react-navigation/drawer": "5.12.9",
"@react-navigation/material-top-tabs": "5.3.19",
"@react-navigation/native": "5.9.8",
"@react-navigation/stack": "5.14.9",
"@react-navigation/bottom-tabs": "6.0.9",
"@react-navigation/drawer": "6.1.8",
"@react-navigation/elements": "1.2.1",
"@react-navigation/material-top-tabs": "6.0.6",
"@react-navigation/native": "6.0.6",
"@react-navigation/stack": "6.0.11",
"@svgr/webpack": "4.3.2",
"@xmldom/xmldom": "0.7.5",
"amplitude-js": "8.2.1",
@@ -70,7 +72,7 @@
"jquery-i18next": "1.2.1",
"js-md5": "0.6.1",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#9e5d83f4aceb9f922583c871d933e97ee2b05753",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#502aaf15b3aeb64b5893306a249b5e10c9eea30c",
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
"lodash": "4.17.21",
"moment": "2.29.1",
@@ -78,39 +80,40 @@
"optional-require": "1.0.3",
"promise.allsettled": "1.0.4",
"punycode": "2.1.1",
"react": "16.12",
"react-dom": "16.12",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-emoji-render": "1.2.4",
"react-focus-lock": "2.5.1",
"react-i18next": "10.11.4",
"react-linkify": "1.0.0-alpha",
"react-native": "github:jitsi/react-native#891986ec5ecaef65d1c8a7fe472f86cf84fe7551",
"react-native-background-timer": "2.4.0",
"react-native-calendar-events": "github:jitsi/react-native-calendar-events#df48ecdc4e1e90c5352f803ddbab1fa7269b74a7",
"react-native-callstats": "3.70.1",
"react-native-collapsible": "1.5.1",
"react-native-default-preference": "1.4.2",
"react-native-device-info": "8.0.0",
"react-native-gesture-handler": "1.10.3",
"react-native-get-random-values": "1.7.0",
"react-native": "0.63.4",
"react-native-background-timer": "2.4.1",
"react-native-calendar-events": "2.2.0",
"react-native-callstats": "3.73.7",
"react-native-collapsible": "1.6.0",
"react-native-default-preference": "github:kevinresol/react-native-default-preference#11bff5eb05cb04fd8d35b5e761eeee80525e8c6c",
"react-native-device-info": "8.4.8",
"react-native-gesture-handler": "2.1.0",
"react-native-get-random-values": "1.7.2",
"react-native-immersive": "2.0.0",
"react-native-keep-awake": "4.0.0",
"react-native-paper": "4.8.1",
"react-native-performance": "2.0.0",
"react-native-pager-view": "5.4.9",
"react-native-paper": "4.11.1",
"react-native-performance": "2.1.0",
"react-native-reanimated": "1.13.3",
"react-native-safe-area-context": "3.3.2",
"react-native-screens": "2.18.1",
"react-native-sound": "github:jitsi/react-native-sound#3fe5480fce935e888d5089d94a191c7c7e3aa190",
"react-native-splash-screen": "3.2.0",
"react-native-screens": "3.10.1",
"react-native-sound": "0.11.1",
"react-native-splash-screen": "3.3.0",
"react-native-svg": "12.1.0",
"react-native-svg-transformer": "0.14.3",
"react-native-tab-view": "2.16.0",
"react-native-url-polyfill": "1.2.0",
"react-native-video": "5.1.1",
"react-native-watch-connectivity": "0.4.3",
"react-native-webrtc": "1.94.0",
"react-native-webview": "11.0.2",
"react-native-youtube-iframe": "2.1.1",
"react-native-svg-transformer": "1.0.0",
"react-native-tab-view": "3.1.1",
"react-native-url-polyfill": "1.3.0",
"react-native-video": "5.2.0",
"react-native-watch-connectivity": "1.0.4",
"react-native-webrtc": "1.94.1",
"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",
@@ -148,10 +151,10 @@
"eslint-plugin-react": "7.26.1",
"eslint-plugin-react-native": "3.11.0",
"expose-loader": "3.0.0",
"flow-bin": "0.104.0",
"flow-bin": "0.122.0",
"imports-loader": "0.7.1",
"jetifier": "1.6.4",
"metro-react-native-babel-preset": "0.56.0",
"metro-react-native-babel-preset": "0.59.0",
"patch-package": "6.4.7",
"process": "0.11.10",
"sass": "1.26.8",

View File

@@ -1,78 +0,0 @@
diff --git a/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m b/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m
index d9387c4..a487da0 100644
--- a/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m
+++ b/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m
@@ -165,10 +165,10 @@ - (void)webSocket:(RCTSRWebSocket *)webSocket didFailWithError:(NSError *)error
NSNumber *socketID = [webSocket reactTag];
_contentHandlers[socketID] = nil;
_sockets[socketID] = nil;
- [self sendEventWithName:@"websocketFailed" body:@{
- @"message": error.localizedDescription,
- @"id": socketID
- }];
+ NSDictionary *body =
+ @{@"message" : error.localizedDescription ?: @"Undefined, error is nil",
+ @"id" : socketID ?: @(-1)};
+ [self sendEventWithName:@"websocketFailed" body:body];
}
- (void)webSocket:(RCTSRWebSocket *)webSocket
diff --git a/node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm b/node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm
index bd48f44..d243ed0 100644
--- a/node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm
+++ b/node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm
@@ -767,7 +767,7 @@ - (void)registerExtraLazyModules
#endif
}
-- (NSArray<RCTModuleData *> *)_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules
+- (NSArray<RCTModuleData *> *)_initializeModules:(NSArray<Class> *)modules
withDispatchGroup:(dispatch_group_t)dispatchGroup
lazilyDiscovered:(BOOL)lazilyDiscovered
{
diff --git a/node_modules/react-native/React/Modules/RCTTiming.m b/node_modules/react-native/React/Modules/RCTTiming.m
index 8a09022..265d7b6 100644
--- a/node_modules/react-native/React/Modules/RCTTiming.m
+++ b/node_modules/react-native/React/Modules/RCTTiming.m
@@ -130,6 +130,11 @@ - (void)setBridge:(RCTBridge *)bridge
object:nil];
}
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(proximityChanged)
+ name:UIDeviceProximityStateDidChangeNotification
+ object:nil];
+
_bridge = bridge;
}
@@ -276,6 +281,16 @@ - (void)didUpdateFrame:(RCTFrameUpdate *)update
}
}
+-(void)proximityChanged
+{
+ BOOL near = [UIDevice currentDevice].proximityState;
+ if (near) {
+ [self appDidMoveToBackground];
+ } else {
+ [self appDidMoveToForeground];
+ }
+}
+
- (void)scheduleSleepTimer:(NSDate *)sleepTarget
{
@synchronized (self) {
diff --git a/node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm b/node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm
index 3cb73b5..e4a14b4 100644
--- a/node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm
+++ b/node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm
@@ -297,7 +297,7 @@ - (void)notifyAboutTurboModuleSetup:(const char *)name
@"%@ has no setter or ivar for its bridge, which is not "
"permitted. You must either @synthesize the bridge property, "
"or provide your own setter method.",
- RCTBridgeModuleNameForClass(module));
+ RCTBridgeModuleNameForClass(Class(module)));
}
}

View File

@@ -0,0 +1,33 @@
diff --git a/node_modules/react-native/React/CoreModules/RCTTiming.mm b/node_modules/react-native/React/CoreModules/RCTTiming.mm
index 7517771..5af8bdc 100644
--- a/node_modules/react-native/React/CoreModules/RCTTiming.mm
+++ b/node_modules/react-native/React/CoreModules/RCTTiming.mm
@@ -148,6 +148,11 @@ - (void)setup
name:name
object:nil];
}
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(proximityChanged)
+ name:UIDeviceProximityStateDidChangeNotification
+ object:nil];
}
- (void)dealloc
@@ -184,6 +189,16 @@ - (void)appDidMoveToForeground
[self startTimers];
}
+- (void)proximityChanged
+{
+ BOOL isClose = [UIDevice currentDevice].proximityState;
+ if (isClose) {
+ [self appDidMoveToBackground];
+ } else {
+ [self appDidMoveToForeground];
+ }
+}
+
- (void)stopTimers
{
if (_inBackground) {

View File

@@ -0,0 +1,13 @@
diff --git a/node_modules/react-native-gesture-handler/android/build.gradle b/node_modules/react-native-gesture-handler/android/build.gradle
index 8afc3d5..4b1f721 100644
--- a/node_modules/react-native-gesture-handler/android/build.gradle
+++ b/node_modules/react-native-gesture-handler/android/build.gradle
@@ -26,7 +26,7 @@ def shouldUseCommonInterfaceFromReanimated() {
def json = new JsonSlurper().parseText(inputFile.text)
def reanimatedVersion = json.version as String
def (major, minor, patch) = reanimatedVersion.tokenize('.')
- return Integer.parseInt(minor) >= 3
+ return Integer.parseInt(major) >= 2 && Integer.parseInt(minor) >= 3
} else {
return false
}

12
react-native.config.js Normal file
View File

@@ -0,0 +1,12 @@
/**
* This is needed because the RN cli incorrectly detects the iOS app path as
* jitsi-meet/ios/app and thus all pod references in the now dynamically generated
* Podfile are wrong.
*/
module.exports = {
project: {
ios: {
project: '.ios/jitsi-meet.xcworkspace'
}
}
};

View File

@@ -23,6 +23,5 @@ export default class HangupButton extends AbstractHangupButton<Props, *> {
*/
_doHangup() {
api.executeCommand('hangup');
window.close();
}
}

View File

@@ -31,21 +31,22 @@ export type Props = {
* @abstract
*/
export class AbstractApp extends BaseApp<Props, *> {
_init: Promise<*>;
/**
* The deferred for the initialisation {{promise, resolve, reject}}.
*/
_init: Object;
/**
* Initializes the app.
*
* @inheritdoc
*/
componentDidMount() {
super.componentDidMount();
async componentDidMount() {
await super.componentDidMount();
this._init.then(() => {
// If a URL was explicitly specified to this React Component, then
// open it; otherwise, use a default.
this._openURL(toURLString(this.props.url) || this._getDefaultURL());
});
// If a URL was explicitly specified to this React Component, then
// open it; otherwise, use a default.
this._openURL(toURLString(this.props.url) || this._getDefaultURL());
}
/**
@@ -53,23 +54,23 @@ export class AbstractApp extends BaseApp<Props, *> {
*
* @inheritdoc
*/
componentDidUpdate(prevProps: Props) {
async componentDidUpdate(prevProps: Props) {
const previousUrl = toURLString(prevProps.url);
const currentUrl = toURLString(this.props.url);
const previousTimestamp = prevProps.timestamp;
const currentTimestamp = this.props.timestamp;
this._init.then(() => {
// Deal with URL changes.
await this._init.promise;
if (previousUrl !== currentUrl
// Deal with URL changes.
// XXX Refer to the implementation of loadURLObject: in
// ios/sdk/src/JitsiMeetView.m for further information.
|| previousTimestamp !== currentTimestamp) {
this._openURL(currentUrl || this._getDefaultURL());
}
});
if (previousUrl !== currentUrl
// XXX Refer to the implementation of loadURLObject: in
// ios/sdk/src/JitsiMeetView.m for further information.
|| previousTimestamp !== currentTimestamp) {
this._openURL(currentUrl || this._getDefaultURL());
}
}
/**

View File

@@ -53,7 +53,10 @@ type Props = AbstractAppProps & {
* @augments AbstractApp
*/
export class App extends AbstractApp {
_init: Promise<*>;
/**
* The deferred for the initialisation {{promise, resolve, reject}}.
*/
_init: Object;
/**
* Initializes a new {@code App} instance.
@@ -81,40 +84,45 @@ export class App extends AbstractApp {
*
* @returns {void}
*/
componentDidMount() {
super.componentDidMount();
async componentDidMount() {
await super.componentDidMount();
SplashScreen.hide();
}
this._init.then(() => {
const { dispatch, getState } = this.state.store;
/**
* Initializes feature flags and updates settings.
*
* @returns {void}
*/
_extraInit() {
const { dispatch, getState } = this.state.store;
// We set these early enough so then we avoid any unnecessary re-renders.
dispatch(updateFlags(this.props.flags));
// We set these early enough so then we avoid any unnecessary re-renders.
dispatch(updateFlags(this.props.flags));
// Check if serverURL is configured externally and not allowed to change.
const serverURLChangeEnabled = getFeatureFlag(getState(), SERVER_URL_CHANGE_ENABLED, true);
// Check if serverURL is configured externally and not allowed to change.
const serverURLChangeEnabled = 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') {
const { serverURL } = this.props.url;
if (!serverURLChangeEnabled) {
// As serverURL is provided externally, so we push it to settings.
if (typeof this.props.url !== 'undefined') {
const { serverURL } = this.props.url;
if (typeof serverURL !== 'undefined') {
dispatch(updateSettings({ serverURL }));
}
if (typeof serverURL !== 'undefined') {
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];
// Update settings with feature-flag.
const callIntegrationEnabled = this.props.flags[CALL_INTEGRATION_ENABLED];
if (typeof callIntegrationEnabled !== 'undefined') {
dispatch(updateSettings({ disableCallIntegration: !callIntegrationEnabled }));
}
});
if (typeof callIntegrationEnabled !== 'undefined') {
dispatch(updateSettings({ disableCallIntegration: !callIntegrationEnabled }));
}
}
/**

View File

@@ -1,6 +1,7 @@
// @flow
import '../authentication/middleware';
import '../base/i18n/middleware';
import '../base/devices/middleware';
import '../dynamic-branding/middleware';
import '../e2ee/middleware';
@@ -8,6 +9,7 @@ import '../external-api/middleware';
import '../keyboard-shortcuts/middleware';
import '../local-recording/middleware';
import '../no-audio-signal/middleware';
import '../notifications/middleware';
import '../noise-detection/middleware';
import '../old-client-notification/middleware';
import '../power-monitor/middleware';
@@ -15,6 +17,7 @@ import '../prejoin/middleware';
import '../remote-control/middleware';
import '../screen-share/middleware';
import '../shared-video/middleware';
import '../settings/middleware';
import '../talk-while-muted/middleware';
import '../virtual-background/middleware';
import '../facial-recognition/middleware';

View File

@@ -98,11 +98,11 @@ MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
}
dispatch(showNotification({
customActionNameKey: 'notify.raiseHandAction',
customActionHandler: () => batch(() => {
customActionNameKey: [ 'notify.raiseHandAction' ],
customActionHandler: [ () => batch(() => {
dispatch(raiseHand(true));
dispatch(hideNotification(uid));
}),
}) ],
descriptionKey,
sticky: true,
titleKey,
@@ -221,8 +221,8 @@ StateListenerRegistry.register(
dispatch(showNotification({
titleKey: 'notify.hostAskedUnmute',
sticky: true,
customActionNameKey: 'notify.unmute',
customActionHandler: () => dispatch(muteLocal(false, MEDIA_TYPE.AUDIO))
customActionNameKey: [ 'notify.unmute' ],
customActionHandler: [ () => dispatch(muteLocal(false, MEDIA_TYPE.AUDIO)) ]
}, NOTIFICATION_TIMEOUT_TYPE.STICKY));
dispatch(playSound(ASKED_TO_UNMUTE_SOUND_ID));
}

View File

@@ -16,6 +16,7 @@ import {
StateListenerRegistry
} from '../../redux';
import { SoundCollection } from '../../sounds';
import { createDeferred } from '../../util';
import { appWillMount, appWillUnmount } from '../actions';
import logger from '../logger';
@@ -43,7 +44,10 @@ type State = {
* @abstract
*/
export default class BaseApp extends Component<*, State> {
_init: Promise<*>;
/**
* The deferred for the initialisation {{promise, resolve, reject}}.
*/
_init: Object;
/**
* Initializes a new {@code BaseApp} instance.
@@ -64,8 +68,8 @@ export default class BaseApp extends Component<*, State> {
* Initializes the app.
*
* @inheritdoc
*/
componentDidMount() {
*/
async componentDidMount() {
/**
* Make the mobile {@code BaseApp} wait until the {@code AsyncStorage}
* implementation of {@code Storage} initializes fully.
@@ -74,21 +78,28 @@ export default class BaseApp extends Component<*, State> {
* @see {@link #_initStorage}
* @type {Promise}
*/
this._init = this._initStorage()
.catch(err => {
/* BaseApp should always initialize! */
logger.error(err);
})
.then(() => new Promise(resolve => {
this._init = createDeferred();
try {
await this._initStorage();
const setStatePromise = new Promise(resolve => {
this.setState({
store: this._createStore()
}, resolve);
}))
.then(() => this.state.store.dispatch(appWillMount(this)))
.catch(err => {
/* BaseApp should always initialize! */
logger.error(err);
});
await setStatePromise;
await this._extraInit();
} catch (err) {
/* BaseApp should always initialize! */
logger.error(err);
}
this.state.store.dispatch(appWillMount(this));
this._init.resolve();
}
/**
@@ -127,6 +138,15 @@ export default class BaseApp extends Component<*, State> {
return _initializing || Promise.resolve();
}
/**
* Extra initialisation that subclasses might require.
*
* @returns {void}
*/
_extraInit() {
// To be implemented by subclass.
}
/**
* Implements React's {@link Component#render()}.
*

View File

@@ -19,6 +19,11 @@ export type Props = {
*/
onAvatarLoadError?: Function,
/**
* Additional parameters to be passed to onAvatarLoadError function.
*/
onAvatarLoadErrorParams?: Object,
/**
* Expected size of the avatar.
*/

View File

@@ -4,12 +4,17 @@ import React, { PureComponent } from 'react';
import { getParticipantById } from '../../participants';
import { connect } from '../../redux';
import { getAvatarColor, getInitials } from '../functions';
import { getAvatarColor, getInitials, isCORSAvatarURL } from '../functions';
import { StatelessAvatar } from '.';
import { StatelessAvatar } from './';
export type Props = {
/**
* The URL patterns for URLs that needs to be handled with CORS.
*/
_corsAvatarURLs: Array<string>,
/**
* Custom avatar backgrounds from branding.
*/
@@ -25,6 +30,11 @@ export type Props = {
*/
_loadableAvatarUrl: ?string,
/**
* Indicates whether _loadableAvatarUrl should use CORS or not.
*/
_loadableAvatarUrlUseCORS: ?boolean,
/**
* A prop to maintain compatibility with web.
*/
@@ -76,10 +86,16 @@ export type Props = {
* URL of the avatar, if any.
*/
url: ?string,
/**
* Indicates whether to load the avatar using CORS or not.
*/
useCORS?: ?boolean
}
type State = {
avatarFailed: boolean
avatarFailed: boolean,
isUsingCORS: boolean
}
export const DEFAULT_SIZE = 65;
@@ -105,8 +121,15 @@ class Avatar<P: Props> extends PureComponent<P, State> {
constructor(props: P) {
super(props);
const {
_corsAvatarURLs,
url,
useCORS
} = props;
this.state = {
avatarFailed: false
avatarFailed: false,
isUsingCORS: Boolean(useCORS) || Boolean(url && isCORSAvatarURL(url, _corsAvatarURLs))
};
this._onAvatarLoadError = this._onAvatarLoadError.bind(this);
@@ -118,7 +141,9 @@ class Avatar<P: Props> extends PureComponent<P, State> {
* @inheritdoc
*/
componentDidUpdate(prevProps: P) {
if (prevProps.url !== this.props.url) {
const { _corsAvatarURLs, url } = this.props;
if (prevProps.url !== url) {
// URI changed, so we need to try to fetch it again.
// Eslint doesn't like this statement, but based on the React doc, it's safe if it's
@@ -126,7 +151,8 @@ class Avatar<P: Props> extends PureComponent<P, State> {
// eslint-disable-next-line react/no-did-update-set-state
this.setState({
avatarFailed: false
avatarFailed: false,
isUsingCORS: Boolean(this.props.useCORS) || Boolean(url && isCORSAvatarURL(url, _corsAvatarURLs))
});
}
}
@@ -141,6 +167,7 @@ class Avatar<P: Props> extends PureComponent<P, State> {
_customAvatarBackgrounds,
_initialsBase,
_loadableAvatarUrl,
_loadableAvatarUrlUseCORS,
className,
colorBase,
dynamicColor,
@@ -150,7 +177,7 @@ class Avatar<P: Props> extends PureComponent<P, State> {
testId,
url
} = this.props;
const { avatarFailed } = this.state;
const { avatarFailed, isUsingCORS } = this.state;
const avatarProps = {
className,
@@ -158,19 +185,26 @@ class Avatar<P: Props> extends PureComponent<P, State> {
id,
initials: undefined,
onAvatarLoadError: undefined,
onAvatarLoadErrorParams: undefined,
size,
status,
testId,
url: undefined
url: undefined,
useCORS: isUsingCORS
};
// _loadableAvatarUrl is validated that it can be loaded, but uri (if present) is not, so
// we still need to do a check for that. And an explicitly provided URI is higher priority than
// an avatar URL anyhow.
const effectiveURL = (!avatarFailed && url) || _loadableAvatarUrl;
const useReduxLoadableAvatarURL = avatarFailed || !url;
const effectiveURL = useReduxLoadableAvatarURL ? _loadableAvatarUrl : url;
if (effectiveURL) {
avatarProps.onAvatarLoadError = this._onAvatarLoadError;
if (useReduxLoadableAvatarURL) {
avatarProps.onAvatarLoadErrorParams = { dontRetry: true };
avatarProps.useCORS = _loadableAvatarUrlUseCORS;
}
avatarProps.url = effectiveURL;
}
@@ -195,12 +229,24 @@ class Avatar<P: Props> extends PureComponent<P, State> {
/**
* Callback to handle the error while loading of the avatar URI.
*
* @param {Object} params - An object with parameters.
* @param {boolean} params.dontRetry - If false we will retry to load the Avatar with different CORS mode.
* @returns {void}
*/
_onAvatarLoadError() {
this.setState({
avatarFailed: true
});
_onAvatarLoadError(params = {}) {
const { dontRetry = false } = params;
if (Boolean(this.props.useCORS) === this.state.isUsingCORS && !dontRetry) {
// try different mode of loading the avatar.
this.setState({
isUsingCORS: !this.state.isUsingCORS
});
} else {
// we already have tried loading the avatar with and without CORS and it failed.
this.setState({
avatarFailed: true
});
}
}
}
@@ -215,11 +261,14 @@ export function _mapStateToProps(state: Object, ownProps: Props) {
const { colorBase, displayName, participantId } = ownProps;
const _participant: ?Object = participantId && getParticipantById(state, participantId);
const _initialsBase = _participant?.name ?? displayName;
const { corsAvatarURLs } = state['features/base/config'];
return {
_customAvatarBackgrounds: state['features/dynamic-branding'].avatarBackgrounds,
_corsAvatarURLs: corsAvatarURLs,
_initialsBase,
_loadableAvatarUrl: _participant?.loadableAvatarUrl,
_loadableAvatarUrlUseCORS: _participant?.loadableAvatarUrlUseCORS,
colorBase
};
}

View File

@@ -29,6 +29,18 @@ type Props = AbstractProps & {
* props.
*/
export default class StatelessAvatar extends AbstractStatelessAvatar<Props> {
/**
* Instantiates a new {@code Component}.
*
* @inheritdoc
*/
constructor(props: Props) {
super(props);
this._onAvatarLoadError = this._onAvatarLoadError.bind(this);
}
/**
* Implements {@code Component#render}.
*
@@ -164,4 +176,22 @@ export default class StatelessAvatar extends AbstractStatelessAvatar<Props> {
style = { styles.avatarContent(size) } />
);
}
_onAvatarLoadError: () => void;
/**
* Handles avatar load errors.
*
* @returns {void}
*/
_onAvatarLoadError() {
const { onAvatarLoadError, onAvatarLoadErrorParams = {} } = this.props;
if (onAvatarLoadError) {
onAvatarLoadError({
...onAvatarLoadErrorParams,
dontRetry: true
});
}
}
}

View File

@@ -3,7 +3,6 @@
import React from 'react';
import { Icon } from '../../../icons';
import { isGravatarURL } from '../../functions';
import AbstractStatelessAvatar, { type Props as AbstractProps } from '../AbstractStatelessAvatar';
type Props = AbstractProps & {
@@ -31,7 +30,12 @@ type Props = AbstractProps & {
/**
* TestId of the element, if any.
*/
testId?: string
testId?: string,
/**
* Indicates whether to load the avatar using CORS or not.
*/
useCORS?: ?boolean
};
/**
@@ -39,13 +43,25 @@ type Props = AbstractProps & {
* props.
*/
export default class StatelessAvatar extends AbstractStatelessAvatar<Props> {
/**
* Instantiates a new {@code Component}.
*
* @inheritdoc
*/
constructor(props: Props) {
super(props);
this._onAvatarLoadError = this._onAvatarLoadError.bind(this);
}
/**
* Implements {@code Component#render}.
*
* @inheritdoc
*/
render() {
const { initials, url } = this.props;
const { initials, url, useCORS } = this.props;
if (this._isIcon(url)) {
return (
@@ -67,10 +83,10 @@ export default class StatelessAvatar extends AbstractStatelessAvatar<Props> {
<img
alt = 'avatar'
className = { this._getAvatarClassName() }
crossOrigin = { isGravatarURL(url) ? '' : undefined }
crossOrigin = { useCORS ? '' : undefined }
data-testid = { this.props.testId }
id = { this.props.id }
onError = { this.props.onAvatarLoadError }
onError = { this._onAvatarLoadError }
src = { url }
style = { this._getAvatarStyle() } />
</div>
@@ -160,4 +176,19 @@ export default class StatelessAvatar extends AbstractStatelessAvatar<Props> {
}
_isIcon: (?string | ?Object) => boolean;
_onAvatarLoadError: () => void;
/**
* Handles avatar load errors.
*
* @returns {void}
*/
_onAvatarLoadError() {
const { onAvatarLoadError, onAvatarLoadErrorParams } = this.props;
if (typeof onAvatarLoadError === 'function') {
onAvatarLoadError(onAvatarLoadErrorParams);
}
}
}

View File

@@ -3,8 +3,6 @@
import GraphemeSplitter from 'grapheme-splitter';
import _ from 'lodash';
import { GRAVATAR_BASE_URL } from './constants';
const AVATAR_COLORS = [
'#6A50D3',
'#FF9B42',
@@ -16,7 +14,7 @@ const AVATAR_COLORS = [
'#2AA076',
'#00A8B3'
];
const wordSplitRegex = (/\s+|\.+|_+|;+|-+|,+|\|+|\/+|\\+/);
const wordSplitRegex = (/\s+|\.+|_+|;+|-+|,+|\|+|\/+|\\+|"+|'+|\(+|\)+|#+|&+/);
const splitter = new GraphemeSplitter();
/**
@@ -68,17 +66,18 @@ function getFirstGraphemeUpper(word) {
export function getInitials(s: ?string) {
// We don't want to use the domain part of an email address, if it is one
const initialsBasis = _.split(s, '@')[0];
const [ firstWord, secondWord ] = initialsBasis.split(wordSplitRegex);
const [ firstWord, secondWord ] = initialsBasis.split(wordSplitRegex).filter(Boolean);
return getFirstGraphemeUpper(firstWord) + getFirstGraphemeUpper(secondWord);
}
/**
* Checks if the passed URL is pointing to the gravatar service.
* Checks if the passed URL should be loaded with CORS.
*
* @param {string} url - The URL.
* @param {Array<string>} corsURLs - The URL pattern that matches a URL that needs to be handled with CORS.
* @returns {void}
*/
export function isGravatarURL(url: string = '') {
return url.startsWith(GRAVATAR_BASE_URL);
export function isCORSAvatarURL(url: string | any = '', corsURLs: Array<string> = []) {
return corsURLs.some(pattern => url.startsWith(pattern));
}

View File

@@ -45,7 +45,7 @@ const styles = theme => {
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
maxWidth: 292,
marginRight: 16,
marginRight: theme.spacing(3),
'&.selected': {
fontWeight: 600
@@ -186,8 +186,8 @@ function CopyButton({ classes, className, displayedText, textToCopy, textOnHover
return (
<>
<div className = { `${classes.copyButton}-content` }>
{ isHovered ? textOnHover : displayedText }
<div className = { clsx(classes.content) }>
<span> { isHovered ? textOnHover : displayedText } </span>
</div>
<Icon src = { IconCopy } />
</>

View File

@@ -19,7 +19,7 @@ type Props = {
/**
* Class name for context menu. Used to overwrite default styles.
*/
className?: string,
className?: ?string,
/**
* The entity for which the context menu is displayed.
@@ -31,10 +31,15 @@ type Props = {
*/
hidden?: boolean,
/**
* Whether or not the menu is already in a drawer.
*/
inDrawer?: ?boolean,
/**
* Whether or not drawer should be open.
*/
isDrawerOpen: boolean,
isDrawerOpen?: boolean,
/**
* Target elements against which positioning calculations are made.
@@ -49,7 +54,7 @@ type Props = {
/**
* Callback for drawer close.
*/
onDrawerClose: Function,
onDrawerClose?: Function,
/**
* Callback for the mouse entering the component.
@@ -59,7 +64,7 @@ type Props = {
/**
* Callback for the mouse leaving the component.
*/
onMouseLeave: Function
onMouseLeave?: Function
};
const useStyles = makeStyles(theme => {
@@ -106,6 +111,7 @@ const ContextMenu = ({
className,
entity,
hidden,
inDrawer,
isDrawerOpen,
offsetTarget,
onClick,
@@ -147,6 +153,14 @@ const ContextMenu = ({
}
}, [ hidden ]);
if (_overflowDrawer && inDrawer) {
return (<div
className = { styles.drawer }
onClick = { onDrawerClose }>
{children}
</div>);
}
return _overflowDrawer
? <JitsiPortal>
<Drawer

View File

@@ -0,0 +1,129 @@
// @flow
import { makeStyles } from '@material-ui/styles';
import clsx from 'clsx';
import React from 'react';
import { useSelector } from 'react-redux';
import { showOverflowDrawer } from '../../../toolbox/functions.web';
import { Icon } from '../../icons';
export type Props = {
/**
* Label used for accessibility.
*/
accessibilityLabel: string,
/**
* CSS class name used for custom styles.
*/
className?: string,
/**
* Custom icon. If used, the icon prop is ignored.
* Used to allow custom children instead of just the default icons.
*/
customIcon?: React$Node,
/**
* Whether or not the action is disabled.
*/
disabled?: boolean,
/**
* Id of the action container.
*/
id?: string,
/**
* Default icon for action.
*/
icon?: Function,
/**
* Click handler.
*/
onClick?: Function,
/**
* Action text.
*/
text: string,
/**
* Class name for the text.
*/
textClassName?: string
}
const useStyles = makeStyles(theme => {
return {
contextMenuItem: {
alignItems: 'center',
cursor: 'pointer',
display: 'flex',
minHeight: '40px',
padding: '10px 16px',
boxSizing: 'border-box',
'& > *:not(:last-child)': {
marginRight: `${theme.spacing(3)}px`
},
'&:hover': {
backgroundColor: theme.palette.ui04
}
},
contextMenuItemDisabled: {
pointerEvents: 'none'
},
contextMenuItemDrawer: {
padding: '12px 16px'
},
contextMenuItemIcon: {
'& svg': {
fill: theme.palette.icon01
}
}
};
});
const ContextMenuItem = ({
accessibilityLabel,
className,
customIcon,
disabled,
id,
icon,
onClick,
text,
textClassName }: Props) => {
const styles = useStyles();
const _overflowDrawer = useSelector(showOverflowDrawer);
return (
<div
aria-label = { accessibilityLabel }
className = { clsx(styles.contextMenuItem,
_overflowDrawer && styles.contextMenuItemDrawer,
disabled && styles.contextMenuItemDisabled,
className
) }
id = { id }
key = { text }
onClick = { onClick }>
{customIcon ? customIcon
: icon && <Icon
className = { styles.contextMenuItemIcon }
size = { 20 }
src = { icon } />}
<span className = { textClassName ?? '' }>{text}</span>
</div>
);
};
export default ContextMenuItem;

View File

@@ -1,57 +1,16 @@
// @flow
import { makeStyles } from '@material-ui/core';
import clsx from 'clsx';
import React from 'react';
import { useSelector } from 'react-redux';
import { showOverflowDrawer } from '../../../toolbox/functions.web';
import { Icon } from '../../icons';
import ContextMenuItem from './ContextMenuItem';
export type Action = {
/**
* Label used for accessibility.
*/
accessibilityLabel: string,
/**
* CSS class name used for custom styles.
*/
className?: string,
/**
* Custom icon. If used, the icon prop is ignored.
* Used to allow custom children instead of just the default icons.
*/
customIcon?: React$Node,
/**
* Id of the action container.
*/
id?: string,
/**
* Default icon for action.
*/
icon?: Function,
/**
* Click handler.
*/
onClick?: Function,
/**
* Action text.
*/
text: string
}
type Props = {
/**
* List of actions in this group.
*/
actions?: Array<Action>,
actions?: Array<Object>,
/**
* The children of the component.
@@ -59,7 +18,6 @@ type Props = {
children?: React$Node,
};
const useStyles = makeStyles(theme => {
return {
contextMenuItemGroup: {
@@ -70,33 +28,6 @@ const useStyles = makeStyles(theme => {
'& + &:not(:empty)': {
borderTop: `1px solid ${theme.palette.ui04}`
}
},
contextMenuItem: {
alignItems: 'center',
cursor: 'pointer',
display: 'flex',
minHeight: '40px',
padding: '10px 16px',
boxSizing: 'border-box',
'& > *:not(:last-child)': {
marginRight: `${theme.spacing(3)}px`
},
'&:hover': {
backgroundColor: theme.palette.ui04
}
},
contextMenuItemDrawer: {
padding: '12px 16px'
},
contextMenuItemIcon: {
'& svg': {
fill: theme.palette.icon01
}
}
};
});
@@ -106,28 +37,14 @@ const ContextMenuItemGroup = ({
children
}: Props) => {
const styles = useStyles();
const _overflowDrawer = useSelector(showOverflowDrawer);
return (
<div className = { styles.contextMenuItemGroup }>
{children}
{actions && actions.map(({ accessibilityLabel, className, customIcon, id, icon, onClick, text }) => (
<div
aria-label = { accessibilityLabel }
className = { clsx(styles.contextMenuItem,
_overflowDrawer && styles.contextMenuItemDrawer,
className
) }
id = { id }
key = { text }
onClick = { onClick }>
{customIcon ? customIcon
: icon && <Icon
className = { styles.contextMenuItemIcon }
size = { 20 }
src = { icon } />}
<span>{text}</span>
</div>
{actions && actions.map(actionProps => (
<ContextMenuItem
key = { actionProps.text }
{ ...actionProps } />
))}
</div>
);

View File

@@ -4,12 +4,7 @@ import { useCallback, useRef, useState } from 'react';
import { findAncestorByClass } from '../../../participants-pane/functions';
type NullProto = {
[key: string]: any,
__proto__: null
};
type RaiseContext = NullProto | {|
type RaiseContext = {|
/**
* Target elements against which positioning calculations are made.
@@ -22,7 +17,7 @@ type RaiseContext = NullProto | {|
entity?: string | Object,
|};
const initialState = Object.freeze(Object.create(null));
const initialState = Object.freeze({});
const useContextMenu = () => {
const [ raiseContext, setRaiseContext ] = useState < RaiseContext >(initialState);

View File

@@ -43,6 +43,16 @@ export const CONFERENCE_JOINED = 'CONFERENCE_JOINED';
export const CONFERENCE_LEFT = 'CONFERENCE_LEFT';
/**
* The type of (redux) action, which indicates conference local subject changes.
*
* {
* type: CONFERENCE_LOCAL_SUBJECT_CHANGED
* subject: string
* }
*/
export const CONFERENCE_LOCAL_SUBJECT_CHANGED = 'CONFERENCE_LOCAL_SUBJECT_CHANGED';
/**
* The type of (redux) action, which indicates conference subject changes.
*
* {
@@ -172,6 +182,17 @@ export const SEND_TONES = 'SEND_TONES';
*/
export const SET_FOLLOW_ME = 'SET_FOLLOW_ME';
/**
* The type of (redux) action which updates the current known status of the
* Mute Reactions Sound feature.
*
* {
* type: SET_START_REACTIONS_MUTED,
* enabled: boolean
* }
*/
export const SET_START_REACTIONS_MUTED = 'SET_START_REACTIONS_MUTED';
/**
* The type of (redux) action which sets the password to join or lock a specific
* {@code JitsiConference}.

View File

@@ -12,8 +12,6 @@ import { JITSI_CONNECTION_CONFERENCE_KEY } from '../connection';
import { JitsiConferenceEvents } from '../lib-jitsi-meet';
import {
MEDIA_TYPE,
isAudioMuted,
isVideoMuted,
setAudioMuted,
setAudioUnmutePermissions,
setVideoMuted,
@@ -29,7 +27,13 @@ import {
participantRoleChanged,
participantUpdated
} from '../participants';
import { getLocalTracks, replaceLocalTrack, trackAdded, trackRemoved } from '../tracks';
import {
destroyLocalTracks,
getLocalTracks,
replaceLocalTrack,
trackAdded,
trackRemoved
} from '../tracks';
import { getBackendSafeRoomName } from '../util';
import {
@@ -37,6 +41,7 @@ import {
CONFERENCE_FAILED,
CONFERENCE_JOINED,
CONFERENCE_LEFT,
CONFERENCE_LOCAL_SUBJECT_CHANGED,
CONFERENCE_SUBJECT_CHANGED,
CONFERENCE_TIMESTAMP_CHANGED,
CONFERENCE_UNIQUE_ID_SET,
@@ -53,7 +58,8 @@ import {
SET_PASSWORD_FAILED,
SET_ROOM,
SET_PENDING_SUBJECT_CHANGE,
SET_START_MUTED_POLICY
SET_START_MUTED_POLICY,
SET_START_REACTIONS_MUTED
} from './actionTypes';
import {
AVATAR_URL_COMMAND,
@@ -157,22 +163,12 @@ function _addConferenceListeners(conference, dispatch, state) {
conference.on(
JitsiConferenceEvents.AUDIO_UNMUTE_PERMISSIONS_CHANGED,
disableAudioMuteChange => {
const muted = isAudioMuted(state);
// Disable the mute button only if its muted.
if (!disableAudioMuteChange || (disableAudioMuteChange && muted)) {
dispatch(setAudioUnmutePermissions(disableAudioMuteChange));
}
dispatch(setAudioUnmutePermissions(disableAudioMuteChange));
});
conference.on(
JitsiConferenceEvents.VIDEO_UNMUTE_PERMISSIONS_CHANGED,
disableVideoMuteChange => {
const muted = isVideoMuted(state);
// Disable the mute button only if its muted.
if (!disableVideoMuteChange || (disableVideoMuteChange && muted)) {
dispatch(setVideoUnmutePermissions(disableVideoMuteChange));
}
dispatch(setVideoUnmutePermissions(disableVideoMuteChange));
});
// Dispatches into features/base/tracks follow:
@@ -192,6 +188,8 @@ function _addConferenceListeners(conference, dispatch, state) {
}
});
conference.on(JitsiConferenceEvents.TRACK_UNMUTE_REJECTED, track => dispatch(destroyLocalTracks(track)));
// Dispatches into features/base/participants follow:
conference.on(
JitsiConferenceEvents.DISPLAY_NAME_CHANGED,
@@ -512,7 +510,7 @@ export function checkIfCanJoin() {
const { authRequired, password }
= getState()['features/base/conference'];
const replaceParticipant = getReplaceParticipant(APP.store.getState());
const replaceParticipant = getReplaceParticipant(getState());
authRequired && dispatch(_conferenceWillJoin(authRequired));
authRequired && authRequired.join(password, replaceParticipant);
@@ -669,6 +667,24 @@ export function setFollowMe(enabled: boolean) {
};
}
/**
* Enables or disables the Mute reaction sounds feature.
*
* @param {boolean} muted - Whether or not reaction sounds should be muted for all participants.
* @param {boolean} updateBackend - Whether or not the moderator should notify all participants for the new setting.
* @returns {{
* type: SET_START_REACTIONS_MUTED,
* muted: boolean
* }}
*/
export function setStartReactionsMuted(muted: boolean, updateBackend: boolean = false) {
return {
type: SET_START_REACTIONS_MUTED,
muted,
updateBackend
};
}
/**
* Sets the password to join or lock a specific JitsiConference.
*
@@ -777,7 +793,7 @@ export function setStartMutedPolicy(
}
/**
* Changing conference subject.
* Sets the conference subject.
*
* @param {string} subject - The new subject.
* @returns {void}
@@ -796,3 +812,19 @@ export function setSubject(subject: string) {
}
};
}
/**
* Sets the conference local subject.
*
* @param {string} localSubject - The new local subject.
* @returns {{
* type: CONFERENCE_LOCAL_SUBJECT_CHANGED,
* localSubject: string
* }}
*/
export function setLocalSubject(localSubject: string) {
return {
type: CONFERENCE_LOCAL_SUBJECT_CHANGED,
localSubject
};
}

View File

@@ -27,3 +27,7 @@ export const EMAIL_COMMAND = 'email';
* from the outside is not cool but it should suffice for now.
*/
export const JITSI_CONFERENCE_URL_KEY = Symbol('url');
export const TRIGGER_READY_TO_CLOSE_REASONS = [
'The meeting has been terminated'
];

View File

@@ -180,9 +180,9 @@ export function getConferenceName(stateful: Function | Object): string {
const state = toState(stateful);
const { callee } = state['features/base/jwt'];
const { callDisplayName } = state['features/base/config'];
const { pendingSubjectChange, room, subject } = getConferenceState(state);
const { localSubject, room, subject } = getConferenceState(state);
return pendingSubjectChange
return localSubject
|| subject
|| callDisplayName
|| (callee && callee.name)

View File

@@ -1,5 +1,6 @@
// @flow
import { readyToClose } from '../../../features/mobile/external-api/actions';
import {
ACTION_PINNED,
ACTION_UNPINNED,
@@ -38,8 +39,10 @@ import {
conferenceFailed,
conferenceWillLeave,
createConference,
setLocalSubject,
setSubject
} from './actions';
import { TRIGGER_READY_TO_CLOSE_REASONS } from './constants';
import {
_addLocalTracksToConference,
_removeLocalTracksFromConference,
@@ -130,6 +133,14 @@ function _conferenceFailed({ dispatch, getState }, next, action) {
titleKey: 'dialog.sessTerminated'
}, NOTIFICATION_TIMEOUT_TYPE.LONG));
if (TRIGGER_READY_TO_CLOSE_REASONS.includes(reason)) {
if (typeof APP === undefined) {
dispatch(readyToClose());
} else {
APP.API.notifyReadyToClose();
}
}
break;
}
case JitsiConferenceErrors.CONFERENCE_RESTARTED: {
@@ -474,11 +485,12 @@ function _sendTones({ getState }, next, action) {
*/
function _setRoom({ dispatch, getState }, next, action) {
const state = getState();
const { subject } = state['features/base/config'];
const { localSubject, subject } = state['features/base/config'];
const { room } = action;
if (room) {
// Set the stored subject.
dispatch(setLocalSubject(localSubject));
dispatch(setSubject(subject));
}

View File

@@ -41,6 +41,7 @@ function _toggleScreenSharing(enabled, store) {
}
} else {
dispatch(destroyLocalDesktopTrackIfExists());
setPictureInPictureDisabled(false);
}
}

View File

@@ -10,6 +10,7 @@ import {
CONFERENCE_FAILED,
CONFERENCE_JOINED,
CONFERENCE_LEFT,
CONFERENCE_LOCAL_SUBJECT_CHANGED,
CONFERENCE_SUBJECT_CHANGED,
CONFERENCE_TIMESTAMP_CHANGED,
CONFERENCE_WILL_JOIN,
@@ -20,7 +21,8 @@ import {
SET_PASSWORD,
SET_PENDING_SUBJECT_CHANGE,
SET_ROOM,
SET_START_MUTED_POLICY
SET_START_MUTED_POLICY,
SET_START_REACTIONS_MUTED
} from './actionTypes';
import { isRoomValid } from './functions';
@@ -55,6 +57,9 @@ ReducerRegistry.register(
case CONFERENCE_SUBJECT_CHANGED:
return set(state, 'subject', action.subject);
case CONFERENCE_LOCAL_SUBJECT_CHANGED:
return set(state, 'localSubject', action.localSubject);
case CONFERENCE_TIMESTAMP_CHANGED:
return set(state, 'conferenceTimestamp', action.conferenceTimestamp);
@@ -77,6 +82,9 @@ ReducerRegistry.register(
case SET_FOLLOW_ME:
return set(state, 'followMeEnabled', action.enabled);
case SET_START_REACTIONS_MUTED:
return set(state, 'startReactionsMuted', action.muted);
case SET_LOCATION_URL:
return set(state, 'room', undefined);

View File

@@ -108,11 +108,14 @@ export default [
'disablePolls',
'disableProfile',
'disableReactions',
'disableReactionsModeration',
'disableRecordAudioNotification',
'disableRemoteControl',
'disableRemoteMute',
'disableResponsiveTiles',
'disableRtx',
'disableSelfView',
'disableSelfViewSettings',
'disableScreensharingVirtualBackground',
'disableShortcuts',
'disableShowMoreStats',
@@ -159,11 +162,13 @@ export default [
'googleApiApplicationClientID',
'hiddenPremeetingButtons',
'hideConferenceSubject',
'hideDisplayName',
'hideRecordingLabel',
'hideParticipantsStats',
'hideConferenceTimer',
'hiddenDomain',
'hideAddRoomButton',
'hideEmailInSettings',
'hideLobbyButton',
'hosts',
'iAmRecorder',
@@ -173,6 +178,7 @@ export default [
'inviteAppName',
'liveStreamingEnabled',
'localRecording',
'localSubject',
'maxFullResolutionParticipants',
'mouseMoveCallbackInterval',
'notifications',
@@ -183,6 +189,7 @@ export default [
'pcStatsInterval',
'preferH264',
'preferredCodec',
'prejoinConfig',
'prejoinPageEnabled',
'requireDisplayName',
'remoteVideoMenu',

View File

@@ -56,3 +56,14 @@ export const PREMEETING_BUTTONS = [ 'microphone', 'camera', 'select-background',
* The toolbar buttons to show on 3rdParty prejoin screen.
*/
export const THIRD_PARTY_PREJOIN_BUTTONS = [ 'microphone', 'camera', 'select-background' ];
/**
* The set of feature flags.
*
* @enum {string}
*/
export const FEATURE_FLAGS = {
SOURCE_NAME_SIGNALING: 'sourceNameSignaling'
};

View File

@@ -7,7 +7,7 @@ import _ from 'lodash';
import { parseURLParams } from '../util';
import CONFIG_WHITELIST from './configWhitelist';
import { _CONFIG_STORE_PREFIX } from './constants';
import { _CONFIG_STORE_PREFIX, FEATURE_FLAGS } from './constants';
import INTERFACE_CONFIG_WHITELIST from './interfaceConfigWhitelist';
import logger from './logger';
@@ -49,6 +49,29 @@ export function getMeetingRegion(state: Object) {
return state['features/base/config']?.deploymentInfo?.region || '';
}
/**
* Selector used to get the sourceNameSignaling feature flag.
*
* @param {Object} state - The global state.
* @returns {boolean}
*/
export function getSourceNameSignalingFeatureFlag(state: Object) {
return getFeatureFlag(state, FEATURE_FLAGS.SOURCE_NAME_SIGNALING);
}
/**
* Selector used to get a feature flag.
*
* @param {Object} state - The global state.
* @param {string} featureFlag - The name of the feature flag.
* @returns {boolean}
*/
export function getFeatureFlag(state: Object, featureFlag: string) {
const featureFlags = state['features/base/config']?.flags || {};
return Boolean(featureFlags[featureFlag]);
}
/**
* Selector used to get the disableRemoveRaisedHandOnFocus.
*

View File

@@ -68,3 +68,14 @@ export function isToolbarButtonEnabled(buttonName: string, state: Object | Array
return buttons.includes(buttonName);
}
/**
* Returns whether audio level measurement is enabled or not.
*
* @param {Object} state - The state of the app.
* @returns {boolean}
*/
export function areAudioLevelsEnabled(state: Object): boolean {
// Default to false for React Native as audio levels are of no interest to the mobile app.
return navigator.product !== 'ReactNative' && !state['features/base/config'].disableAudioLevels;
}

View File

@@ -1,4 +1,5 @@
export * from './actions';
export * from './actionTypes';
export { default as CONFIG_WHITELIST } from './configWhitelist';
export * from './constants';
export * from './functions';

View File

@@ -125,6 +125,12 @@ function _setConfig({ dispatch, getState }, next, action) {
}));
}
if (action.config.disableSelfView !== undefined) {
dispatch(updateSettings({
disableSelfView: action.config.disableSelfView
}));
}
dispatch(updateConfig(config));
// FIXME On Web we rely on the global 'config' variable which gets altered

View File

@@ -282,6 +282,13 @@ function _translateLegacyConfig(oldValue: Object) {
};
}
newValue.prejoinConfig = oldValue.prejoinConfig || {};
if (oldValue.hasOwnProperty('prejoinPageEnabled')
&& !newValue.prejoinConfig.hasOwnProperty('enabled')
) {
newValue.prejoinConfig.enabled = oldValue.prejoinPageEnabled;
}
newValue.disabledSounds = newValue.disabledSounds || [];
if (oldValue.disableJoinLeaveSounds) {

View File

@@ -2,7 +2,11 @@
import UIEvents from '../../../../service/UI/UIEvents';
import { processExternalDeviceRequest } from '../../device-selection';
import { NOTIFICATION_TIMEOUT_TYPE, showNotification, showWarningNotification } from '../../notifications';
import {
NOTIFICATION_TIMEOUT_TYPE,
showNotification,
showWarningNotification
} from '../../notifications';
import { replaceAudioTrackById, replaceVideoTrackById, setDeviceStatusWarning } from '../../prejoin/actions';
import { isPrejoinPageVisible } from '../../prejoin/functions';
import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';
@@ -294,8 +298,8 @@ function _checkAndNotifyForNewDevice(store, newDevices, oldDevices) {
dispatch(showNotification({
description,
titleKey,
customActionNameKey: 'notify.newDeviceAction',
customActionHandler: _useDevice.bind(undefined, store, devicesArray)
customActionNameKey: [ 'notify.newDeviceAction' ],
customActionHandler: [ _useDevice.bind(undefined, store, devicesArray) ]
}, NOTIFICATION_TIMEOUT_TYPE.MEDIUM));
}
});

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