Compare commits

...

136 Commits

Author SHA1 Message Date
Jaya Allamsetty
909c397664 chore(deps) lib-jitsi-meet@latest
* fix(LocalSdpMunger): do not fake video sdp when screen sharing
* fix(JitsiConference) avoid extra processing if the room was left
* fix(moderator) remove unneeded log

b0d27fa8da...28a5355356
2021-09-07 18:16:23 -04:00
Andrei Gavrilescu
f51e65d129 feat(rtcstats): send dominant speaker stats (#9883)
* send dominant speaker stats

* fix lint
2021-09-07 16:20:50 +03:00
Vlad Piersec
56c0edc896 fix(toolbox): Show dominant speaker name only when in conference 2021-09-07 10:22:24 +02:00
Cross
add8265ab9 chore(config) fix spacing
Removed a redundant space under maxBitratesVideo.
2021-09-07 09:40:46 +02:00
tmoldovan8x8
527b96fe00 task(android): updates sdk version 2021-09-06 12:49:09 +03:00
tmoldovan8x8
452b1b7e2e fix(android): renames amplitudereactnative project to use react-native- pattern 2021-09-06 12:29:58 +03:00
hmuresan
a0c3a00e59 chore(config): Whitelist disableRecordAudioNotification config 2021-09-06 11:40:02 +03:00
hmuresan
00b5ce71e0 fix(external-api): Avoid naming event 'error'
- EventEmmitter treats 'error' as a special case and throws error.
2021-09-02 19:37:23 +03:00
Saúl Ibarra Corretgé
9a8b67a0a4 feat(notifications) skip join notifications when meetings grow large 2021-09-02 16:49:04 +02:00
Saúl Ibarra Corretgé
c730676ce6 fix(lang,notifications) make join notification text more generic 2021-09-02 16:49:04 +02:00
Saúl Ibarra Corretgé
76a53b039f fix(notifications) throttle join notifications for 2 seconds 2021-09-02 16:49:04 +02:00
phict
5713b381c4 lang: Update main-sv.json (#9862) 2021-09-02 09:45:20 -05:00
Mejans
1e83bdef6c lang: Update i18n Occitan (#9853)
Some update.
Been up to line 253 at the moment
2021-09-02 09:45:01 -05:00
chagai95
531ec79e13 lang: Added and edited translations for vi (#9850)
Co-authored-by: cfriedlander <chagai.friedlander@aarenet.com>
2021-09-02 09:44:36 -05:00
José Luís Andrade
772e7b0121 lang: Update portuguese translation (#9836)
* Update portuguese translation

Translate "dialog”, "virtualBackground”, "info” and "settings" sections

* fix "you" translation

* revert "you" translation to original
2021-09-02 09:44:14 -05:00
Alex Bumbu
5bd329acb9 feat(ios) update dropbox authentication to PKCE flow 2021-09-02 14:17:08 +02:00
Hristo Terezov
dfd53f4041 fix(rn,ParticipantPane) optimize
Use a FlatList to avoid loading all participants at once.
2021-09-02 14:13:32 +02:00
Saúl Ibarra Corretgé
221cf67d0a fix(sounds) fix reaction sound names
- Remove unicode charcters from filenames
- Simplify code for copying them to the iOS SDK
2021-09-02 12:21:53 +02:00
Saúl Ibarra Corretgé
20a1833c6c fix(rn,filmstrip) simplify code
viewableItems always comes in order and indexes are always ascending. In
addition, if the array comes empty (I saw it happen on Android at least, when
scrolling like a maniac) we'd calculate the right value, instead of Infinity.
2021-09-01 23:35:44 +02:00
Saúl Ibarra Corretgé
36f604aab8 fix(rn,filmstrip) avoid fast scroll trigggering visibility notifications
An item won't be considered visible until it has been visible for 500ms.
2021-09-01 23:35:44 +02:00
Saúl Ibarra Corretgé
8db6e783f1 fix(rn,external_api) skip participant notifications when not in a meeting 2021-09-01 23:35:06 +02:00
Saúl Ibarra Corretgé
7b4a426ad2 fix(rn,logging) skip some logs on mobile 2021-09-01 23:35:06 +02:00
Saúl Ibarra Corretgé
a687907105 fix(lastn) debounce updating last N
When joining a large meeting every participant join would trigger an attempt of
an update. Try to minimize the amount of calls.
2021-09-01 23:35:06 +02:00
Saúl Ibarra Corretgé
5dc03f56f6 fix(notifications) skip participant joined notifications before we join 2021-09-01 20:12:44 +02:00
tmoldovan8x8
83a1ee1182 task(rn, android): update dropbox logic to retrieve refresh token 2021-09-01 15:21:03 +03:00
Saúl Ibarra Corretgé
0a6872733e fix(video-layout) fix getMaxColumnCount on mobile
interfaceConfig does not exist.
2021-09-01 14:13:30 +02:00
Saúl Ibarra Corretgé
5249998ec5 fix(rn,humbnail) add key prop to array items
Fixes a React warning
2021-09-01 14:12:13 +02:00
Saúl Ibarra Corretgé
18e2232e9e fix(toolbox) fix warning due to missing key prop 2021-09-01 13:41:43 +02:00
Дамян Минков
5c299bcd46 feat: Prints an error log for errors in child components render methods. 2021-08-31 23:31:00 -05:00
Jaya Allamsetty
b9866e3464 fix(tracks) Fix mobile safari issue with startMuted.
On mobile Safari, when a user joins both audio and video muted, browser doesn't playout the remote audio because of a webkit bug. As a workaround, always add the audio track to peerconnection and then mute the track if needed.
2021-08-31 17:04:08 -04:00
Jaya Allamsetty
e5041202dc chore(deps) lib-jitsi-meet@latest
* fix(browser-support): Add audio track to pc always on mobile Safari. On mobile Safari, if a user joins audio and video muted, the browser doesn't decode the incoming audio. Workaround is to always add the audio track to pc and mute it if needed.
* feat: JSON encoded sources. (#1695)

2820d649ea...b0d27fa8da
2021-08-31 17:03:53 -04:00
hmuresan
bec9920c79 chore(dropbox-web) Accommodate short-lived access token 2021-08-31 16:25:29 +03:00
robertpin
5367d43c26 fix(reactions) fix reactions bugs
* Fix: removed web actions from common middlewares

* Fixed raise hand sound

Fix sound to play on raise not lower and work on keyboard shortcut as well

* Fixed reaction keyboard shortcuts

Register shortcuts only when there's more than one participant

* Enforce reactions feature flag on reaction received

* Disable reactions by default on native

* Enable reactions on native by default

* Sort props alphabetically

* Created isreactionsEnabled function

* Remove unused imports

* Fix. No longer show toolbox on reactions and jibri

On message received don't show toolbox for jibri

* Fix isReactionsEnabled function for native

On native check for flag and config option as well
2021-08-31 13:00:27 +02:00
Saúl Ibarra Corretgé
aa06e89807 chore(rn,deps) react-native-webrtc@1.92.1
Fixes several Android crashes.
2021-08-31 12:42:31 +02:00
hmuresan
74026e743c fix(toolbar-buttons) Hide/show invite button based on toolbarButtons 2021-08-31 12:18:10 +03:00
Nathan Beck
eb4fff773b fix(config): add av-moderation notifications to config whitelist (#9774)
* fix(config): add av-moderation notifications to config whitelist

* fix(config): lint fixes
2021-08-30 13:38:19 -05:00
Jaya Allamsetty
5d402b2039 chore(deps) lib-jitsi-meet@latest
* log: Log a task's stack trace when it throws. (#1701)
* deps: update sdp-interop. (#1700)
* fix(replace-track) Add not null check for newTrack (#1698)

53c9c0c9cd...2820d649ea
2021-08-30 14:00:07 -04:00
Hristo Terezov
a2bac9c3ac fix(filmstrip): sort alphabetically. 2021-08-30 11:32:16 -05:00
Hristo Terezov
aff976d53d fix(mobile-pagination):incorrect number of columns 2021-08-30 11:32:16 -05:00
Hristo Terezov
c2ffcdc67e fix(mobile-pagination): Disable bounce effect. 2021-08-30 11:32:16 -05:00
Hristo Terezov
bb670fd90d Apply suggestions from code review
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2021-08-30 11:32:16 -05:00
Hristo Terezov
b31ed40309 fix(mobile-pagination): address PR review comments 2021-08-30 11:32:16 -05:00
Hristo Terezov
7dd43d93b6 feat(filmstrip-pagination): mobile support. 2021-08-30 11:32:16 -05:00
Saúl Ibarra Corretgé
37acce3764 fix(config) add enableReactions to whitelist 2021-08-30 15:32:58 +02:00
phict
4716bdd380 Update main-sv.json
Add lobby translation and some linguistic improvments.
2021-08-27 10:03:27 -05:00
Дамян Минков
7c93a130ca fix: Fixes default values in speakerstats and conf duration modules. 2021-08-27 08:42:59 -05:00
Werner Fleischer
3c18117101 fix(prosody): av_moderation_component default val 2021-08-27 07:58:36 -05:00
Jaya Allamsetty
9013b01df6 fix(filmstrip): Always sort the participants alphabetically.
Reorder the sub-groups (shares, speakers and rest of the participants) always on dominant speaker changes and when participants join or leave.
2021-08-26 18:28:10 -04:00
Jaya Allamsetty
7827c3d1ad fix(filmstrip): Move thumbnails reordering behind a config.js flag.
enableThumbnailReordering flag (enabled by default) will be used to check if the thumbnails needs to be reodred in the UI.
2021-08-26 18:28:10 -04:00
Jaya Allamsetty
751d9a9b8e fix(KeyboardShortcut): pin the correct participants when number keys are used. 2021-08-26 18:28:10 -04:00
Дамян Минков
bafe6fa895 chore(deps) lib-jitsi-meet@latest
* fix: Updates shard value in XmppConnection on new value from xmpp. (#1699)
* fix(docs): copy&paste error for setIsReplaced

61c977f70a...53c9c0c9cd
2021-08-26 17:15:54 -05:00
Дамян Минков
1edf8ab9f0 feat: Drops old prosody dependency (0.10...).
Many features work only with 0.11+ prosody versions and there are instructions in the handbook how to install it before installing jitsi-meet.
2021-08-26 17:15:43 -05:00
Saúl Ibarra Corretgé
c03fb61c5f fix(rn,reactions) fix copying sounds to app bundles 2021-08-26 17:32:34 +02:00
Saúl Ibarra Corretgé
7d6365c5e0 fix(android) avoid exception in onHostPause
YOLO.
2021-08-26 16:34:53 +02:00
Tudor D. Pop
eb4aefbca1 fix(virtual-background) upload bkg image on poor connection 2021-08-26 15:33:43 +02:00
hmuresan
6c40329f6a feat(branding) Add premeeting background image overwrite 2021-08-26 15:14:57 +03:00
Michał Orman
b14e571d5c fix(lang) update Polish translations 2021-08-26 14:02:09 +02:00
adam j hartz
70b369a1af feat(VideoContainer) add option to avoid cropping focused video 2021-08-26 11:23:19 +02:00
alittriutari
cf6d6f8a12 fix(lang) update Japanese translations 2021-08-26 09:34:47 +02:00
Saúl Ibarra Corretgé
b15f1d190d fix(chat) avoid emojifying URLs
Fixes: https://github.com/jitsi/jitsi-meet/issues/9661
2021-08-25 11:43:20 -05:00
Saúl Ibarra Corretgé
e67db2381e Update setup.web.js 2021-08-25 17:22:50 +02:00
Saúl Ibarra Corretgé
11382cfda6 fix(local-storage) use local storage on WebKit when not in an iframe
There should be no need to use the workaround when visiting the site normally.
2021-08-25 17:22:50 +02:00
Saúl Ibarra Corretgé
248865ad3f fix(rn) enable reactions by default 2021-08-25 16:38:20 +02:00
Horatiu Muresan
7966c8f88f feat(errors) Expose errors through Iframe API (#9801) 2021-08-25 15:23:40 +03:00
José Luís Andrade
6537447d7c fix(lang) update Portuguese translation 2021-08-25 14:09:23 +02:00
hmuresan
a892d5fed1 fix(pre-meeting) Hide invite button for JaaS 2021-08-25 11:09:56 +03:00
Saúl Ibarra Corretgé
4acafebe5f chore(deps) lib-jitsi-meet@latest
* feat(e2ee) add support for WebRTC Encoded Transform
* fix(JitsiConference) skip AudioOutputProblemDetector on disableAudioLevels
* feat(xmpp) remove clientNode config option
* Workaround for Chrome ice connection failure detection (#1685)

c23abfa2bc...61c977f70a
2021-08-25 09:53:07 +02:00
Hristo Terezov
88a11b9f3e fix(TileView): not showing all participants. 2021-08-24 15:40:29 -05:00
Дамян Минков
bcc326c150 fix: Fixes undefined errors in MeetingParticipant - Item and ContextMenu. 2021-08-24 14:38:54 -05:00
Дамян Минков
e348270099 Revert "fix: Fixes reloads after enabling AV moderation."
This reverts commit 38f9c97f40.
2021-08-24 14:38:54 -05:00
Дамян Минков
fc59cdbdbe fix: Fixes showing awaiting AV moderation after grant moderator. 2021-08-24 14:38:54 -05:00
Saúl Ibarra Corretgé
59ef5c4789 feat(e2ee) add support for WebRTC Encoded Transform
An alternative to Insertable Streams, currently implemented in Safarii / WebKit.

https://w3c.github.io/webrtc-encoded-transform/

It's currently behind a config flag, both in Safari and here.

Fixes: https://github.com/jitsi/jitsi-meet/issues/9585
2021-08-24 17:43:20 +02:00
hmuresan
b6b943e7de feat(lobby) Add sound for participant knocking 2021-08-24 18:01:10 +03:00
Дамян Минков
48efa4ac61 feat: Updates i18n-iso-countries to latest. Fixes #9792. 2021-08-24 09:19:29 -05:00
Christoph Settgast
2f1105e6d2 chore(deps) @matrix-org/olm@latest
Bugfixes since 3.2.1, see https://gitlab.matrix.org/matrix-org/olm/-/blob/master/CHANGELOG.rst
In 3.2.2 the package name changed to @matrix-org/olm, thus
updating in Makefile & imports

Signed-off-by: Christoph Settgast <csett86@web.de>
2021-08-24 15:40:18 +02:00
Calin Chitu
9d5024cc5d fix(authentication) fixed close on cancel click 2021-08-24 15:39:56 +02:00
hmuresan
8b23265a50 fix(notifications) Add timeout for video/audio lost notifs 2021-08-24 16:30:02 +03:00
Saúl Ibarra Corretgé
5bc424459f fix(iframe) don't register service worker when in an iframe
Fixes: https://github.com/jitsi/jitsi-meet/issues/9712
2021-08-24 11:58:43 +02:00
robertpin
605ce9db62 Added default state to persistance 2021-08-24 10:07:44 +03:00
Дамян Минков
e2f760c7f1 fix: Fixes AV moderation used in tenants. 2021-08-23 09:43:53 -05:00
Дамян Минков
e63b3016c9 feat: Allow AV moderation for p2p users. 2021-08-23 09:43:53 -05:00
Дамян Минков
4d07d4ae76 feat: Always show AV moderation. 2021-08-23 09:43:53 -05:00
Дамян Минков
2616e126fb feat: Show footer context menu in p2p. 2021-08-23 09:43:53 -05:00
Дамян Минков
38f9c97f40 fix: Fixes reloads after enabling AV moderation. 2021-08-23 09:43:53 -05:00
robertpin
c7a91e1974 feat(reaction-sounds) Added sounds for reactions (#9775)
* Added sounds for reactions

* Updated reactions list

* Added reactions to sound settings

* Added support for multiple sounds

* Added feature flag for sounds

* Updated sound settings

Moved reactions toggle at the top of the list

* Added disable reaction sounds notification

* Added reaction button zoom for burst intensity

* Fixed raise hand sound

* Fixed register sounds for reactions

* Changed boo emoji

* Updated sounds

* Fixed lint errors

* Fixed reaction sounds file names

* Fix raise hand sound

Play sound only on raise hand not on lower hand

* Fixed types for sound constants

* Fixed type for raise hand sound constant
2021-08-23 12:57:56 +03:00
hmuresan
fe41eef398 fix(drawer-menu) Allow scroll on drawer menu items 2021-08-20 16:35:24 +03:00
Saúl Ibarra Corretgé
08177af182 fix(rn,amplitude) update Amplitude SDK on RN
Amplitude has gone back to having a separate package for RN, so switch to it.
2021-08-20 15:24:34 +02:00
José Luís Andrade
229520f74f fix(lang) update Portuguese translation 2021-08-20 14:39:57 +02:00
Saúl Ibarra Corretgé
0d9af05a4b chore(rn,versions) bump app and sdk versions 2021-08-20 11:51:03 +02:00
Avram Tudor
1ad9046a38 Improve premeeting screens ux (#9726)
* feat(prejoin) move invite to toolbar section

* feat(premeeting) redesign prejoin and lobby screens

* code review changes

* fix prejoin flicker and avatar id

* fix password error message and native lobby dialog close position
2021-08-20 11:53:11 +03:00
Avram Tudor
49a73ac446 fix(jaas) do not redirect to plan limit page on auth errors (#9746) 2021-08-20 11:36:09 +03:00
Avram Tudor
8e4a22bdbf fix(moderation) fix ui styles for advanced moderation context menu (#9758) 2021-08-20 11:23:37 +03:00
Saúl Ibarra Corretgé
ddbf334930 fix(e2ee) fix showing not supported warning when alone 2021-08-19 17:19:00 +02:00
Saúl Ibarra Corretgé
cd5f2b483f fix(e2ee) show entire content at all times 2021-08-19 17:19:00 +02:00
Saúl Ibarra Corretgé
cf34b0a783 fix(e2ee) update E2EE warning message 2021-08-19 17:19:00 +02:00
Saúl Ibarra Corretgé
10cc3b2b31 fix(ios) fix conference failing when proximity sensor is near
React Native links timers to the display, so they cannot run when the display is
not running. Builtin timers already take being in the background into account,
but not the proximity sensor.

Credits: https://github.com/react-native-webrtc/react-native-callkeep/issues/143

Fixes: https://github.com/jitsi/jitsi-meet/issues/9619
2021-08-19 13:55:35 +02:00
Saúl Ibarra Corretgé
27e4e862fd feat(xmpp) remove clientNode config option 2021-08-19 13:28:58 +02:00
Avram Tudor
4b3d92dcbd fix(moderation) highlight dominant speaker (#9750) 2021-08-19 14:08:30 +03:00
Saúl Ibarra Corretgé
5c1e2b4bd2 fix(AudioRoutePickerDialog) add proper margin 2021-08-19 10:47:53 +02:00
Saúl Ibarra Corretgé
a4d516ca86 fix(ios) fix deadlock when selecting audio device
In WebRTC M92 the RTCAudioSession lock changed from a recursive one to a regular
mutex one, so make sure we don't attempt to lock it  while already holding the
lock.
2021-08-19 10:47:53 +02:00
Avram Tudor
d41c597446 fix(moderation) hide status icons on hover (#9747) 2021-08-19 11:32:36 +03:00
José Luís Andrade
4788720edd fix(lang) update portuguese translation 2021-08-19 09:56:20 +02:00
Jaya Allamsetty
40099e97ec feat(Filmstrip): Reorder the visible participants in the filmstrip. (#9707)
* feat(Filmstrip): Reorder the visible participants in the filmstrip.
The participants are ordered alphabetically and the endpoints with screenshares, shared-videos and dominant speakers (in that order) are bumped to the top of the list. The local participant is also moved to the top left corner as opposed to the bottom right corner.

* squash: Implement review comments.

* squash: store alphabetically sorted list in redux and move shared videos to top.

* squash: Use the DEFAULT_REMOTE_DISPLAY_NAME from interfaceConfig for users without a display name.
2021-08-18 18:34:01 -04:00
Дамян Минков
a7a44902ec fix: Fixes dot shown left of logo.
Empty list with border is showing 2px dot.
2021-08-18 17:18:39 -05:00
Scott Boone
7af23f35ba added comment for future proofing 2021-08-18 14:01:11 -05:00
Calin Chitu
cf49af1a9f fix(participants-pane) fixed participants pane button toggled state 2021-08-18 12:39:27 -05:00
Saúl Ibarra Corretgé
186125607f fix(prosody) fix username not being set in mod_auth_jitsi-anonymous
If the session was not resumed the plugin must generate a random username, just
like the regular anonymous authentication plugin does.
2021-08-18 15:16:53 +02:00
Saúl Ibarra Corretgé
508decc3f3 fix(prosody) fix typo in filename 2021-08-18 15:16:53 +02:00
Avram Tudor
6d3a4b920b fix(moderation) display green mic icon only for active speaker (#9744) 2021-08-18 15:10:16 +03:00
Avram Tudor
595df524b0 fix(participants) sort participants alphabetically (#9741) 2021-08-18 14:29:41 +03:00
Avram Tudor
9914a5d14a fix(share-video) fix links not being trimmed (#9740) 2021-08-18 12:09:04 +03:00
Дамян Минков
fbf9d489f0 fix: Fixes an error with configuration without analytics.
Fixes an error `Cannot convert undefined or null to object` on load.
2021-08-17 12:54:29 -05:00
AJ-عجائب البرمجة
8106fb06e4 fix(rn,sidebar) fix not appearing on RTL languages 2021-08-17 13:15:22 +02:00
Calin Chitu
036ef0f387 fix(video-menu) fixed position for horizontal filmstrip view 2021-08-17 13:54:54 +03:00
Calinteodor
307699a34c feat(toolbox) added android screen share flag
Fixes issue #9435
2021-08-17 13:42:29 +03:00
tmoldovan8x8
c23375793e fix(rn): import React from react package 2021-08-17 13:14:20 +03:00
hmuresan
4dc642fb4d feat(callstats) Add callStatsConfigParams config 2021-08-16 13:15:44 +03:00
Andrei Gavrilescu
d47e67c28c fix(screen-share): never mute audio screen share track #9725 2021-08-16 12:24:01 +03:00
hmuresan
db0b861353 chore(deps) lib-jitsi-meet@latest
6eaffc4b11...c23abfa2bc
2021-08-16 12:12:03 +03:00
Calinteodor
e40d4a48b8 feat(av-moderation) id and aria-label updates for av-moderation test (#9592)
* feat(av-moderation) raised hand ask to unmute aria-label

* feat(av-moderation) fixed test

* feat(av-moderation) added id for notification buttons

* feat(av-moderation) fixed lint error

* feat(av-moderation) added id for non raised hand participant

* feat(av-moderation) added extra id naming for ask to unmute button and participant items

* feat(av-moderation) fixed lint errors

* feat(av-moderation) changed id to participantID

* feat(av-moderation) removed semicolon

* squash: Drop unused id for participantItem.

* squash: Drop unused fields for raisedHand.

Co-authored-by: Дамян Минков <damencho@jitsi.org>
2021-08-15 00:27:18 -05:00
Jade Guiton
8c82c0f56e feat(polls) Ability to create polls inside Jitsi (#9166)
* feat(polls) Added boilerplate code for polls feature

* feat(polls) Implemented simple poll creation and answer modals in web app

feat(polls) Added button to create a poll in toolbar
feat(polls) Added Modal to answer an incoming poll
feat(polls) Implemented basic client-side sending and reception of polls
feat(polls): linked Poll creation to poll answering
fix(polls) Linted code
feat(polls.create) Added fields for question and answers (#3)
* feat(polls.create) Added fields for question and answers + keyboard navigation
* feat(polls.create) Minor changes, added some comments
feat(PollAnswer Component): Component to display modal to answer poll #1 (#2)
* fix(polls) removing necessity of current_poll_id variable
* fix(polls) linting, polls are now updated when an answer is sent
* feat(polls answer) added translation
* fix(polls answer) remove extra comments, fixed typo
* improvement (polls answer) use useSelector instead of mapStateToProps. cleaner code
* fix (polls create) renamed sender to senderId
* fix (polls answer) turned arrow function into useCallBack
feat(PollResults Component): Component to display poll results (#1)
* feat(PollResults Component): fist version of the component
* feat(detailed votes): Display the detailed results of a poll
* feat(Poll results): Use display name instead of ids in detailed results mode
* fix(Poll): change title to question
* fix(Poll type): import Poll type from types.js
* fix(Poll): change title to question
* fix(Poll): get participants out of the map
* fix(Poll): replace filter with find
feat(polls.create) Added "+" and "x" buttons in poll creation form + improved keyboard navigation a bit
feat (polls) Answer modal now display results in real time after validation or skip
feat(polls.create) Minor improvements to poll creation form
feat(poll result) Added default message when trying to display no answer
fix (polls) result windows is now small by default
fix (polls) sanitizes imports to allow startup on react native

* feat(polls.native) Implemented native toolbar button & poll create modal

feat( poll native) added poll creation button in native toolbar
improvement(polls) only one file used for PollCreateButton
feat (polls native) added an example dialog
feat (polls native) added possibility to create and delete options in poll creation
improvement (polls) better styling for PollCreateDialog

* feat(polls) Added ability to drag&drop answers in web poll creation form

* feat(polls) Added native poll answer modal + chat integration, refactored components

Merge branch 'polls-native' of https://github.com/jade-guiton/jitsi-meet into polls-native
improvement (poll) Better styling for poll answer, now uses icons
feat(poll.PollResults): Add native version of PollResults
feat(poll.PollResults): Post results in chat in Native
fix(poll.PollResults): Fix linter error in ChatMessage
feat(polls.native) Improved styling for native poll answer dialog (required some internal changes)

* fix(polls) Heavily refactored and added bars to poll results, other minor changes

fix(poll.create): Move title to Dialog title
feat(poll.create) Minor changes to poll creation / answer dialogs
fix(poll.create) Refactored and improved translations
feat(poll) Improved CSS for modals in web version
fix(poll.pollcreate): Fix button size in native
fix(polls) Refactored poll results component and other minor changes
fix (polls) remove double import
refactor(poll) Heavily refactored poll results (native + web)
feat(polls.results) Added percentage bars and vote counts in web poll results, minor changes to mobile poll results

* fix(polls) Fixes and linting

fix(polls) Reformatted and fixed some linter and Flow errors
fix(polls.results) Fixed voter list border appearing with 0 voters

* feat(polls): Add modal with detailed votes that can be open from the result summary in the chat

* fix(polls) Fixes, refactorings, and minor design changes

feat(polls.results): Refactored poll chat message and improved design in web app
feat(polls.results) Same as last commit, but for mobile version
refactor(polls.results) Refactored PollResultsMessage and removed unnecessary prop in PollResults
fix(polls.results) Fixed all remaining linter and Flow errors
improvement(polls) removed console logs, added comments
fix (polls) linting
fix(polls.results) Fixed bug with poll chat message displaying the wrong name
feat(polls.results) Minor improvement on poll results display (web)
fix(poll.results): Use getParticipantDisplayName to get participant name and avoid empty string as name

* Feat(poll.results): Remember voters names to display after they left the conference (#10)

* feat(poll.results): Add the sender name in Poll object to remember names if participants leave the conference. Names are also updated if changed
* refactor(poll.results): Refactor the memorization of the names of voters to use the same logic as in  the chat
* refactor(poll.results): use Map instead of Array.From(
* refactor(poll.answer): change the way names are stored in poll answers to persist if participant left the call
* Update react/features/polls/components/AbstractPollAnswerDialog.js
* Update react/features/polls/components/AbstractPollCreateDialog.js
* refactor(poll.answer): use voterName instead of senderName to avoid confusion with senderId the id of the sender of the poll
* improvement(polls) Simplified poll answer voter name logic

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: Jade Guiton <guiton.jade@gmail.com>

* fix(poll.native): Fix UI overflow when asking long questions & long options in the mobile app (#11)

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>

* fix(polls) Fixed close button behavior in answer and results dialog (#12)

* fix(polls) Fixed close button behavior in answer and results dialog
* fix(polls) Fixed linter error

* fix(polls) Added a poll queue to avoid overwriting open modals (#13)

* fix(polls) Added a poll queue to avoid overwriting open modals
* fix(polls) Updated documentation for action RECEIVE_POLL

* Refactor(poll.chatresults): Add message in chat with hidden results until the participant has answered (#14)

* refactor(poll.chat): Display poll results in chat when the poll is created instead of when the participant has ansered
* refactor(poll.chat): Hide results until the participant has answered, skipped or canceled a responde to the poll
* Use getParticipantDisplayName instead of only getStore()
* Hide results also in native
* fix(polls) Fixed previous merge

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: Jade Guiton <jade.guiton@centralesupelec.fr>

* minor improvements (polls)

refactor (polls) uniformized string for command names
refactor (polls) changed pollId type to number everywhere

* feat(polls) Added persistence to polls using sendMessage instead of sendCommandOnce (#16)

* feat(polls) Using sendMessage instead of sendCommandOnce, switched poll IDs to string, and ability to receive old polls from backend
* improvement(polls) Linted everything, fixed Flow errors, and added Prosody plugin for polls
* improvement(polls) Historic polls are now displayed in chronological order

* (polls) Minor improvements (#17)

* renaming (polls) Renaming senderId -> voterID for voters
* improvement (polls) sender's name is now provided with poll
* comments (polls) updated comments for senderName types
* fix(polls) Finished merging with json-messages feature
* fix(polls) Fixed incorrect json-message sent with 0 polls

Co-authored-by: Jade Guiton <guiton.jade@gmail.com>

* Move polls to tab (#23)

* Draft(polls): Move polls to polls-pane ; first version for web
* Draft(polls): Move polls to polls-pane ; clean styled.js and remove Participant objects
* fix missing newline at the end of file
* Change behaviour to allow answer poll later
* Fix(polls): change pollId type from number to string for consistency
* feat(polls-pane): Ability to answer to a poll in polls-pane
* feat(polls-pane): Ability to create to a poll in polls-pane
* feat (polls.pane) display a notification when a new poll arrives
* refactor(polls-pane): Update CSS to have a design closer to the mockups
* fix(poll.vote count): Fix votes counting when computing percentage
* fix(poll.vote count): Fix votes counting when computing percentage
* refresh fork with jitsi/jitsi-meet
* design (polls) Better look for poll creation
* refactor(polls pane): Move polls-pane as a chat tab
* Remove the first version of the polls-pane and the button to open it
* Fix notifications and typo
* Translate new polls tab in chat
* Change polls_pane to polls-pane
* Remove unless functions
* Remove usage of styled.js
* Improve responsiveness
* Separate web and native logic
* Remove Create a Poll button in web toolbox
* improvement (polls) added auto scrolling to bottom when a new poll arrives
* Add tabs to swicth between polls and chat in native
* Add AbstractPollsPane
* Add AbstractPollCreate
* Add AbstractPollAnswer
* Add PollAnswer, PollItem and PollList for native
* Add PollCreate for native
* Remove dialogs in web and native
* Remove dialog queue
* Remove useless files
* Move _polls.scss outside dialog folder
* Add possibility to skip answer
* Add (useless for now) see details link
* Add possibility to show detailed results for a poll
* Resize progress bar to make details display
* refactor, design (polls) better style to native design chat
* fix (polls) Removed unecessary files
* translate (polls) added french translation to empty polls
* design fix (polls.native) 'show details' now correctly switch between progress bar and voters mode
* Change See detailed results for Show details and add cursor: pointer
* Fix progress bars not aligned with text
* fix (polls.native) added autoselection of newly created option
* Remove poll answer
* improvement(polls.create) Improved web poll creation form marginally
* improvement(polls.change) Simplified answer removal by reusing poll-answer command
* fix linter
* Fix(translation): update translation

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: spineki <marras.antoine@gmail.com>
Co-authored-by: Fabien Zucchet <fabien.zucchet@viarezo.fr>

* Merge pull request #22 from jade-guiton/polls-with-notification

feat (polls) chat notification badge now display the sum of unread  messages and unread polls
fix(translation): Fix missing translation
Fix flow error

* Cleaned up, fixed, and uniformized translations

* Small improvements to PollAnswer and PollResult + Much refactoring

Specifically:
- "Change vote" button now says "Vote" if voting was skipped
- Clicking on "Change vote" resets the voting form to the last submitted answers instead of a blank slate

- The "answered" field of Polls was replaced by "showResults" and "lastVote"
- The "setAnsweredStatus" action was replaced by "registerVote" and "retractVote"
- Some newly unreachable/useless code was removed
- "showDetails" state is now handled by AbstractPollResults instead of PollItem

* fix(polls tab): change tab underline color to #525252

* fix(poll create): Enforce at least two options to create a poll

* fix(poll create): change 'remove option' color to #E04757

* fix(poll create): Update Poll create CSS to adapt to design

* fix(poll answer): Adapt CSS to make poll answer closer to mockup

* fix(poll result): Udpdate poll result CSS to match mockups

* fix(poll result): Udpdate poll result CSS to match mockups

* fix(poll create): Display 'remove option' only when there is at least 3 options

* fix(polls button): Add hover, active, focus and disabled state to polls buttons

* Last improvements for web

* Native design fixes

* Fix rebase issue in land/main.json

* Fix french translation after rebase

* Fixmobile behaviour

* Fixed keyboard navigation in web poll creation form

* Fixed Flow error related to "no polls" icon in PollsList

* fix(polls): Enabled polls Prosody module in Debian config files

* doc(polls) Added comments to the Prosody module code

* fix(polls): Switched from using an internal LJM event to ones from the public API

* Capitalize I of setIsPollsTabFocused

* extract the 2 button modes into a const

* remove extra new lines

* Rename CLOSE_POLL_TAB for POLL_TAB_CLOSED for clarity

* Rename answers2 for answersParsed for clarity

* use switch instead of if/else chain

* improve syntax for localId fetching

* Refactor: Use BUTTON_MODE.CONTAINED variable instead of 'contained'

* Disable send poll button if not enough data is provided in the form (#30)

* Feat: Add notification badge on chat and poll tabs (#31)

* Feat: Add notification badge on chat and poll tabs

* Add badge equivalent for native

* Update displayNameForm text to mention polls (#34)

* Disable polls UI with a config in config.js (#33)

* Change remove option text color from red to grey (#32)

Co-authored-by: spineki <marras.antoine@gmail.com>
Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: Fabien Zucchet <80532941+fabienzucchet@users.noreply.github.com>
Co-authored-by: Fabien Zucchet <fabien.zucchet@viarezo.fr>
2021-08-14 08:29:42 -05:00
dimitardelchev93
c123ff9e15 feat: Add search to speaker stats (#9510)
* Additional setting to add search to speaker stats

* Add translation for speaker stats search placeholder

* Unset speaker stats search input autocomplete

* Fix lint errors for speaker stats search

* Change setting to disableSpeakerStatsSearch

* Better Object.prototype.hasOwnProperty.call alternative

* Make SpeakerStatsSearch a functional component

* Align header with input and use material-ui styles instead of scss and remove SpeakerStats header and fix dialog close

* Resolve code style remark in SpeakerStats constructor

* Resolve component empty return value remark in SpeakerStatsSearch

* Resolve get config property in outside function remark in SpeakerStatsSearch

* Resolve unnecessary anonymous function remark in SpeakerStatsSearch
2021-08-13 11:10:05 -05:00
tmoldovan8x8
ae33755913 feat(rn,sdk) add setConfigOverride to JitsiMeetConferenceOptions
Allows for overriding any (overridable, of course) config option.
2021-08-13 12:03:41 +02:00
BlackXixo
bcc870daa7 fix(lang) update Spanish translation 2021-08-13 11:31:37 +02:00
dependabot[bot]
a6a95ad13b chore(deps): bump path-parse from 1.0.6 to 1.0.7 in /resources/load-test
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-13 08:23:15 +02:00
Saúl Ibarra Corretgé
195508ea60 chore(deps) lib-jitsi-meet@latest
* fix(ProxyConnection) add new required stubs
* fix(tpc) fix extracting ssrc map when using single stream
* fix(transcribing): send transcripton_language only when necessary (#1677)

97ff597425...6eaffc4b11
2021-08-12 16:26:45 -05:00
José Luís Andrade
5ce4b82c2c update portuguese translation (#9703)
* update portuguese translation

"participantsPane" section

* Update main-pt.json

add "security" translation

* Update main-pt.json

add "lobby" translation
2021-08-12 14:42:23 -05:00
Mauro José da Silva
ab1c016108 fix(lang) update Brazilian Portuguese translations 2021-08-11 09:53:35 +02:00
Дамян Минков
29dd0cf726 fix: Adds a null check in mod_limits_exceptions.
It is failing on prosody 0.11.4 with mod_limits_exception.lua:29: attempt to call method 'set_stanza_size_limit' (a nil value). That prosody misses set_stanza_size_limit.
2021-08-10 14:34:20 -05:00
durduman
1e0c25d816 fix(ios) remove exitPictureInPicture() call from resetBounds(bounds:) 2021-08-10 15:49:31 +02:00
José Luís Andrade
dfd28c501b fix(lang) update portuguese translation 2021-08-10 07:51:04 +02:00
Дамян Минков
ed98eca326 feat: Rises the stanza limit for unlimited jids (jicofo).
c5c4449fbc/doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example (L24)
2021-08-09 11:33:40 -05:00
Andrei Gavrilescu
c5c4449fbc chore(deps) lib-jitsi-meet@latest (#9686)
* feat(transcribing): configurable transcription language

40fd6bdeaa...97ff597425
2021-08-09 13:46:38 +03:00
Andrei Gavrilescu
e45cab9a80 feat(transcribing): configurable transcription language (#9684)
* configurable transcription language

* merge conflict

* set default config value

* fix lint
2021-08-09 12:29:50 +03:00
Дамян Минков
6f44368647 fix(av-moderation): Fixes approving and dismissing the notification.
When participants panel is open and we approve a participant to unmute, the notification was not hidden as we were not correctly updating the state. We were expecting a participant object, but an id of the participant was used.
2021-08-06 15:04:26 -05:00
Jaya Allamsetty
a31a10ba38 fix(logging): Set the log level to debug again.
Plan is to make the Strophe logs more restrictive.
Revert "fix(logging) reduce overly vebose logging"

This reverts commit 09af88088d.
2021-08-06 12:46:29 -04:00
304 changed files with 9472 additions and 3231 deletions

View File

@@ -3,7 +3,7 @@ CLEANCSS = ./node_modules/.bin/cleancss
DEPLOY_DIR = libs
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet/
LIBFLAC_DIR = node_modules/libflacjs/dist/min/
OLM_DIR = node_modules/olm
OLM_DIR = node_modules/@matrix-org/olm
RNNOISE_WASM_DIR = node_modules/rnnoise-wasm/dist/
TFLITE_WASM = react/features/stream-effects/virtual-background/vendor/tflite
MEET_MODELS_DIR = react/features/stream-effects/virtual-background/vendor/models/

View File

@@ -25,5 +25,5 @@ android.enableDexingArtifactTransform.desugaring=false
android.useAndroidX=true
android.enableJetifier=true
appVersion=21.3.0
sdkVersion=3.8.0
appVersion=21.4.0
sdkVersion=3.9.1

View File

@@ -44,7 +44,7 @@ dependencies {
//noinspection GradleDynamicVersion
implementation 'org.webkit:android-jsc:+'
implementation 'com.dropbox.core:dropbox-core-sdk:3.0.8'
implementation 'com.dropbox.core:dropbox-core-sdk:4.0.1'
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation 'com.squareup.duktape:duktape-android:1.3.0'
implementation 'com.google.code.gson:gson:2.8.6'
@@ -56,6 +56,7 @@ dependencies {
exclude group: 'com.android.installreferrer'
}
} else {
implementation project(':react-native-amplitude')
implementation project(':react-native-device-info')
implementation(project(":react-native-google-signin")) {
exclude group: 'com.google.android.gms'
@@ -155,16 +156,9 @@ android.libraryVariants.all { def variant ->
// Bundle sounds
//
copy {
from("${projectDir}/../../sounds/incomingMessage.wav")
from("${projectDir}/../../sounds/joined.wav")
from("${projectDir}/../../sounds/left.wav")
from("${projectDir}/../../sounds/liveStreamingOn.mp3")
from("${projectDir}/../../sounds/liveStreamingOff.mp3")
from("${projectDir}/../../sounds/outgoingRinging.wav")
from("${projectDir}/../../sounds/outgoingStart.wav")
from("${projectDir}/../../sounds/recordingOn.mp3")
from("${projectDir}/../../sounds/recordingOff.mp3")
from("${projectDir}/../../sounds/rejected.wav")
from("${projectDir}/../../sounds")
include("*.wav")
include("*.mp3")
into("${assetsDir}/sounds")
}

View File

@@ -8,6 +8,8 @@ import android.text.TextUtils;
import com.dropbox.core.DbxException;
import com.dropbox.core.DbxRequestConfig;
import com.dropbox.core.android.Auth;
import com.dropbox.core.oauth.DbxCredential;
import com.dropbox.core.v2.DbxClientV2;
import com.dropbox.core.v2.users.FullAccount;
import com.dropbox.core.v2.users.SpaceAllocation;
@@ -17,7 +19,6 @@ import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.dropbox.core.android.Auth;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.module.annotations.ReactModule;
@@ -66,7 +67,7 @@ class DropboxModule
@ReactMethod
public void authorize(final Promise promise) {
if (isEnabled) {
Auth.startOAuth2Authentication(this.getCurrentActivity(), appKey);
Auth.startOAuth2PKCE(this.getCurrentActivity(), appKey, DbxRequestConfig.newBuilder(clientId).build());
this.promise = promise;
} else {
promise.reject(
@@ -181,10 +182,15 @@ class DropboxModule
@Override
public void onHostResume() {
String token = Auth.getOAuth2Token();
DbxCredential credential = Auth.getDbxCredential();
if (token != null && this.promise != null) {
this.promise.resolve(token);
if (credential != null && this.promise != null) {
WritableMap result = Arguments.createMap();
result.putString("token", credential.getAccessToken());
result.putString("rToken", credential.getRefreshToken());
result.putDouble("expireDate", credential.getExpiresAt());
this.promise.resolve(result);
this.promise = null;
}
}

View File

@@ -116,12 +116,15 @@ public class JitsiMeetActivityDelegate {
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager != null) {
// Try to avoid a crash because some devices trip on this assert:
// https://github.com/facebook/react-native/blob/df4e67fe75d781d1eb264128cadf079989542755/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java#L512
// Why this happens is a mystery wrapped in an enigma.
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if (reactContext != null && activity == reactContext.getCurrentActivity()) {
try {
reactInstanceManager.onHostPause(activity);
} catch (AssertionError e) {
// There seems to be a problem in RN when resuming an Activity when
// rotation is involved and the planets align. There doesn't seem to
// be a proper solution, but since the activity is going away anyway,
// we'll YOLO-ignore the exception and hope fo the best.
// Ref: https://github.com/facebook/react-native/search?q=Pausing+an+activity+that+is+not+the+current+activity%2C+this+is+incorrect%21&type=issues
JitsiMeetLogger.e(e, "Error running onHostPause, ignoring");
}
}
}

View File

@@ -40,10 +40,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
* Room name.
*/
private String room;
/**
* Conference subject.
*/
private String subject;
/**
* JWT token used for authentication.
*/
@@ -54,19 +50,16 @@ public class JitsiMeetConferenceOptions implements Parcelable {
*/
private Bundle colorScheme;
/**
* Config. See: https://github.com/jitsi/jitsi-meet/blob/master/config.js
*/
private Bundle config;
/**
* Feature flags. See: https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/flags/constants.js
*/
private Bundle featureFlags;
/**
* Set to {@code true} to join the conference with audio / video muted or to start in audio
* only mode respectively.
*/
private Boolean audioMuted;
private Boolean audioOnly;
private Boolean videoMuted;
/**
* USer information, to be used when no token is specified.
*/
@@ -80,10 +73,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
return room;
}
public String getSubject() {
return subject;
}
public String getToken() {
return token;
}
@@ -96,18 +85,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
return featureFlags;
}
public boolean getAudioMuted() {
return audioMuted;
}
public boolean getAudioOnly() {
return audioOnly;
}
public boolean getVideoMuted() {
return videoMuted;
}
public JitsiMeetUserInfo getUserInfo() {
return userInfo;
}
@@ -118,19 +95,16 @@ public class JitsiMeetConferenceOptions implements Parcelable {
public static class Builder {
private URL serverURL;
private String room;
private String subject;
private String token;
private Bundle colorScheme;
private Bundle config;
private Bundle featureFlags;
private Boolean audioMuted;
private Boolean audioOnly;
private Boolean videoMuted;
private JitsiMeetUserInfo userInfo;
public Builder() {
config = new Bundle();
featureFlags = new Bundle();
}
@@ -162,7 +136,7 @@ public class JitsiMeetConferenceOptions implements Parcelable {
* @return - The {@link Builder} object itself so the method calls can be chained.
*/
public Builder setSubject(String subject) {
this.subject = subject;
setConfigOverride("subject", subject);
return this;
}
@@ -193,11 +167,11 @@ public class JitsiMeetConferenceOptions implements Parcelable {
/**
* Indicates the conference will be joined with the microphone muted.
* @param muted - Muted indication.
* @param audioMuted - Muted indication.
* @return - The {@link Builder} object itself so the method calls can be chained.
*/
public Builder setAudioMuted(boolean muted) {
this.audioMuted = muted;
public Builder setAudioMuted(boolean audioMuted) {
setConfigOverride("startWithAudioMuted", audioMuted);
return this;
}
@@ -209,7 +183,7 @@ public class JitsiMeetConferenceOptions implements Parcelable {
* @return - The {@link Builder} object itself so the method calls can be chained.
*/
public Builder setAudioOnly(boolean audioOnly) {
this.audioOnly = audioOnly;
setConfigOverride("startAudioOnly", audioOnly);
return this;
}
@@ -219,7 +193,7 @@ public class JitsiMeetConferenceOptions implements Parcelable {
* @return - The {@link Builder} object itself so the method calls can be chained.
*/
public Builder setVideoMuted(boolean videoMuted) {
this.videoMuted = videoMuted;
setConfigOverride("startWithVideoMuted", videoMuted);
return this;
}
@@ -261,6 +235,36 @@ public class JitsiMeetConferenceOptions implements Parcelable {
return this;
}
public Builder setConfigOverride(String config, String value) {
this.config.putString(config, value);
return this;
}
public Builder setConfigOverride(String config, int value) {
this.config.putInt(config, value);
return this;
}
public Builder setConfigOverride(String config, boolean value) {
this.config.putBoolean(config, value);
return this;
}
public Builder setConfigOverride(String config, Bundle bundle) {
this.config.putBundle(config, bundle);
return this;
}
public Builder setConfigOverride(String config, String[] list) {
this.config.putStringArray(config, list);
return this;
}
/**
* Builds the immutable {@link JitsiMeetConferenceOptions} object with the configuration
* that this {@link Builder} instance specified.
@@ -271,13 +275,10 @@ public class JitsiMeetConferenceOptions implements Parcelable {
options.serverURL = this.serverURL;
options.room = this.room;
options.subject = this.subject;
options.token = this.token;
options.colorScheme = this.colorScheme;
options.config = this.config;
options.featureFlags = this.featureFlags;
options.audioMuted = this.audioMuted;
options.audioOnly = this.audioOnly;
options.videoMuted = this.videoMuted;
options.userInfo = this.userInfo;
return options;
@@ -290,17 +291,12 @@ public class JitsiMeetConferenceOptions implements Parcelable {
private JitsiMeetConferenceOptions(Parcel in) {
serverURL = (URL) in.readSerializable();
room = in.readString();
subject = in.readString();
token = in.readString();
colorScheme = in.readBundle();
config = in.readBundle();
featureFlags = in.readBundle();
userInfo = new JitsiMeetUserInfo(in.readBundle());
byte tmpAudioMuted = in.readByte();
audioMuted = tmpAudioMuted == 0 ? null : tmpAudioMuted == 1;
byte tmpAudioOnly = in.readByte();
audioOnly = tmpAudioOnly == 0 ? null : tmpAudioOnly == 1;
byte tmpVideoMuted = in.readByte();
videoMuted = tmpVideoMuted == 0 ? null : tmpVideoMuted == 1;
}
Bundle asProps() {
@@ -317,21 +313,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
props.putBundle("colorScheme", colorScheme);
}
Bundle config = new Bundle();
if (audioMuted != null) {
config.putBoolean("startWithAudioMuted", audioMuted);
}
if (audioOnly != null) {
config.putBoolean("startAudioOnly", audioOnly);
}
if (videoMuted != null) {
config.putBoolean("startWithVideoMuted", videoMuted);
}
if (subject != null) {
config.putString("subject", subject);
}
Bundle urlProps = new Bundle();
// The room is fully qualified
@@ -379,14 +360,11 @@ public class JitsiMeetConferenceOptions implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeSerializable(serverURL);
dest.writeString(room);
dest.writeString(subject);
dest.writeString(token);
dest.writeBundle(colorScheme);
dest.writeBundle(config);
dest.writeBundle(featureFlags);
dest.writeBundle(userInfo != null ? userInfo.asBundle() : new Bundle());
dest.writeByte((byte) (audioMuted == null ? 0 : audioMuted ? 1 : 2));
dest.writeByte((byte) (audioOnly == null ? 0 : audioOnly ? 1 : 2));
dest.writeByte((byte) (videoMuted == null ? 0 : videoMuted ? 1 : 2));
}
@Override

View File

@@ -203,6 +203,16 @@ class ReactInstanceManagerHolder {
}
}));
// AmplitudeReactNativePackage
try {
Class<?> amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage");
Constructor constructor = amplitudePackageClass.getConstructor();
packages.add((ReactPackage)constructor.newInstance());
} catch (Exception e) {
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
}
// RNGoogleSigninPackage
try {
Class<?> googlePackageClass = Class.forName("co.apptailor.googlesignin.RNGoogleSigninPackage");
Constructor constructor = googlePackageClass.getConstructor();

View File

@@ -1,6 +1,8 @@
rootProject.name = 'jitsi-meet'
include ':app', ':sdk'
include ':react-native-amplitude'
project(':react-native-amplitude').projectDir = new File(rootProject.projectDir, '../node_modules/@amplitude/react-native//android')
include ':react-native-async-storage'
project(':react-native-async-storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-async-storage/async-storage/android')
include ':react-native-background-timer'

2
app.js
View File

@@ -2,7 +2,7 @@
import 'jquery';
import 'olm';
import '@matrix-org/olm';
import 'focus-visible';

View File

@@ -56,6 +56,7 @@ import {
setAudioOutputDeviceId,
updateDeviceList
} from './react/features/base/devices';
import { isIosMobileBrowser } from './react/features/base/environment/utils';
import {
browser,
isFatalJitsiConnectionError,
@@ -834,7 +835,13 @@ export default {
this._initDeviceList(true);
if (initialOptions.startWithAudioMuted) {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
// Always add the audio track to the peer connection and then mute the track on mobile Safari
// because of a known issue where audio playout doesn't happen if the user joins audio and video muted.
if (isIosMobileBrowser()) {
this.muteAudio(true, true);
} else {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
}
}
return this.startConference(con, localTracks);
@@ -1322,8 +1329,8 @@ export default {
APP.store.dispatch(conferenceWillJoin(room));
// Filter out the tracks that are muted.
const tracks = localTracks.filter(track => !track.isMuted());
// Filter out the tracks that are muted (except on mobile Safari).
const tracks = isIosMobileBrowser() ? localTracks : localTracks.filter(track => !track.isMuted());
this._setLocalAudioVideoStreams(tracks);
this._room = room; // FIXME do not use this
@@ -2106,7 +2113,7 @@ export default {
room.on(
JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,
id => APP.store.dispatch(dominantSpeakerChanged(id, room)));
(dominant, previous) => APP.store.dispatch(dominantSpeakerChanged(dominant, previous, room)));
room.on(
JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,
@@ -2261,7 +2268,9 @@ export default {
// Remove the tracks from the peerconnection.
for (const track of localTracks) {
if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO) {
// Always add the track on mobile Safari because of a known issue where audio playout doesn't happen
// if the user joins audio and video muted.
if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO && !isIosMobileBrowser()) {
promises.push(this.useAudioStream(null));
}
if (videoMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.VIDEO) {

View File

@@ -27,9 +27,6 @@ var config = {
// Websocket URL
// websocket: 'wss://jitsi-meet.example.com/xmpp-websocket',
// The name of client node advertised in XEP-0115 'c' stanza
clientNode: 'http://jitsi.org/jitsimeet',
// The real JID of focus participant - can be overridden here
// Do not change username - FIXME: Make focus username configurable
// https://github.com/jitsi/jitsi-meet/issues/7376
@@ -73,6 +70,9 @@ var config = {
// Enables reactions feature.
// enableReactions: false,
// Disables polls feature.
// disablePolls: false,
// Disables ICE/UDP by filtering out local and remote UDP candidates in
// signalling.
// webrtcIceUdpDisable: false,
@@ -144,6 +144,9 @@ var config = {
// Sets the preferred resolution (height) for local video. Defaults to 720.
// resolution: 720,
// Specifies whether there will be a search field in speaker stats or not
// disableSpeakerStatsSearch: false,
// How many participants while in the tile view mode, before the receiving video quality is reduced from HD to SD.
// Use -1 to disable.
// maxFullResolutionParticipants: 2,
@@ -230,6 +233,17 @@ var config = {
// subtitles and buttons can be configured)
// transcribingEnabled: false,
// If true transcriber will use the application language.
// The application language is either explicitly set by participants in their settings or automatically
// detected based on the environment, e.g. if the app is opened in a chrome instance which is using french as its
// default language then transcriptions for that participant will be in french.
// Defaults to true.
// transcribeWithAppLanguage: true,
// Transcriber language. This settings will only work if "transcribeWithAppLanguage" is explicitly set to false.
// Available languages can be found in lang/language.json.
// preferredTranscribeLanguage: 'en',
// Enables automatic turning on captions when recording is started
// autoCaptionOnRecord: false,
@@ -306,7 +320,7 @@ var config = {
// VP9: {
// low: 100000,
// standard: 300000,
// high: 1200000
// high: 1200000
// }
// },
//
@@ -371,6 +385,11 @@ var config = {
// bridge itself is reachable via UDP)
// useTurnUdp: false
// Enable support for encoded transform in supported browsers. This allows
// E2EE to work in Safari if the corresponding flag is enabled in the browser.
// Experimental.
// enableEncodedTransformSupport: false,
// UI
//
@@ -496,6 +515,10 @@ var config = {
// '__end'
// ],
// List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
// 'microphone', 'camera', 'select-background', 'invite', 'settings'
// hiddenPremeetingButtons: [],
// Stats
//
@@ -513,6 +536,28 @@ var config = {
// callStatsID: '',
// callStatsSecret: '',
// The callstats initialize config params as described in the API:
// https://docs.callstats.io/docs/javascript#callstatsinitialize-with-app-secret
// callStatsConfigParams: {
// disableBeforeUnloadHandler: true, // disables callstats.js's window.onbeforeunload parameter.
// applicationVersion: "app_version", // Application version specified by the developer.
// disablePrecalltest: true, // disables the pre-call test, it is enabled by default.
// siteID: "siteID", // The name/ID of the site/campus from where the call/pre-call test is made.
// additionalIDs: { // additionalIDs object, contains application related IDs.
// customerID: "Customer Identifier. Example, walmart.",
// tenantID: "Tenant Identifier. Example, monster.",
// productName: "Product Name. Example, Jitsi.",
// meetingsName: "Meeting Name. Example, Jitsi loves callstats.",
// serverName: "Server/MiddleBox Name. Example, jvb-prod-us-east-mlkncws12.",
// pbxID: "PBX Identifier. Example, walmart.",
// pbxExtensionID: "PBX Extension Identifier. Example, 5625.",
// fqExtensionID: "Fully qualified Extension Identifier. Example, +71 (US) +5625.",
// sessionID: "Session Identifier. Example, session-12-34"
// },
// collectLegacyStats: true, //enables the collection of legacy stats in chrome browser
// collectIP: true //enables the collection localIP address
// },
// Enables sending participants' display names to callstats
// enableDisplayNameInStats: false,
@@ -583,6 +628,9 @@ var config = {
},
analytics: {
// True if the analytics should be disabled
// disabled: false,
// The Google Analytics Tracking ID:
// googleAnalyticsTrackingId: 'your-tracking-id-UA-123456-1'
@@ -746,7 +794,11 @@ var config = {
// The anchor url used when clicking the logo image
logoClickUrl: 'https://example-company.org',
// The url used for the image used as logo
logoImageUrl: 'https://example.com/logo-img.png'
logoImageUrl: 'https://example.com/logo-img.png',
// Overwrite for pool of background images for avatars
avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
// The lobby/prejoin screen background
premeetingBackground: 'url(https://example.com/premeeting-background.png)'
}
*/
// dynamicBrandingUrl: '',
@@ -891,6 +943,11 @@ var config = {
// 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited
// 'notify.invitedTwoMembers', // shown when 2 participants have been invited
// 'notify.kickParticipant', // shown when a participant is kicked
// 'notify.moderationStartedTitle', // shown when AV moderation is activated
// 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated
// 'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation
// 'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation
// 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation
// 'notify.mutedRemotelyTitle', // shown when user is muted by a remote party
// 'notify.mutedTitle', // shown when user has been muted upon joining,
// 'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device
@@ -899,6 +956,7 @@ var config = {
// 'notify.passwordSetRemotely', // shown when a password has been set remotely
// 'notify.raisedHand', // shown when a partcipant used raise hand,
// 'notify.startSilentTitle', // shown when user joined with no audio
// 'notify.unmute', // shown to moderator when user raises hand during AV moderation
// 'prejoin.errorDialOut',
// 'prejoin.errorDialOutDisconnected',
// 'prejoin.errorDialOutFailed',

View File

@@ -17,6 +17,7 @@ import {
JitsiConnectionErrors,
JitsiConnectionEvents
} from './react/features/base/lib-jitsi-meet';
import { getCustomerDetails } from './react/features/jaas/actions.any';
import { isVpaasMeeting, getJaasJWT } from './react/features/jaas/functions';
import { setPrejoinDisplayNameRequired } from './react/features/prejoin/actions';
const logger = Logger.getLogger(__filename);
@@ -90,9 +91,13 @@ export async function connect(id, password, roomName) {
let { jwt } = state['features/base/jwt'];
const { iAmRecorder, iAmSipGateway } = state['features/base/config'];
if (!iAmRecorder && !iAmSipGateway && !jwt && isVpaasMeeting(state)) {
jwt = await getJaasJWT(state);
APP.store.dispatch(setJWT(jwt));
if (!iAmRecorder && !iAmSipGateway && isVpaasMeeting(state)) {
await APP.store.dispatch(getCustomerDetails());
if (!jwt) {
jwt = await getJaasJWT(state);
APP.store.dispatch(setJWT(jwt));
}
}
// Use Websocket URL for the web app if configured. Note that there is no 'isWeb' check, because there's assumption

View File

@@ -51,8 +51,10 @@ body {
}
}
.jitsi-icon svg {
fill: white;
.jitsi-icon {
&-default svg {
fill: white;
}
}
.disabled .jitsi-icon svg {

View File

@@ -574,3 +574,41 @@
background: #36383C;
border-radius: 3px;
}
.chat-tabs-container {
width: 100%;
border-bottom: thin solid #292929;
display: flex;
justify-content: space-around;
}
.chat-tab {
font-size: 1.2em;
padding-bottom: 0.5em;
width: 50%;
text-align: center;
color: #8B8B8B;
cursor: pointer;
}
.chat-tab-focus {
border-bottom-style: solid;
color: #FFF;
}
.chat-tab-title {
margin-right: 8px;
}
.chat-tab-badge {
background-color: #165ecc;
border-radius: 50%;
box-sizing: border-box;
font-weight: 700;
overflow: hidden;
text-align: center;
text-overflow: ellipsis;
vertical-align: middle;
padding: 0 4px;
color: #FFF;
}

View File

@@ -23,7 +23,7 @@
max-height: calc(80vh - 64px);
background: #242528;
border-radius: 16px 16px 0 0;
overflow-y: hidden;
overflow-y: scroll;
margin-bottom: env(safe-area-inset-bottom, 0);
width: 100%;

View File

@@ -5,14 +5,6 @@
.description {
font-size: 13px;
margin: 15px 0;
.read-more {
cursor: pointer;
opacity: .9;
color: #fff;
font-size: 0.8rem;
font-weight: bold;
}
}
.control-row {

View File

@@ -206,13 +206,3 @@
bottom: 0;
width: 35%;
}
/**
* Resizes elements width to fill the whole screen width with some margin
*/
@mixin adjust-for-max-width($width, $margin) {
@media (max-width: $width) {
margin: 0 $margin;
width: $width - 2 * $margin;
}
}

View File

@@ -48,4 +48,11 @@
.participants_pane-content {
width: 100%;
}
}
}
.jitsi-icon {
&-dominant-speaker {
background-color: #1EC26A;
border-radius: 3px;
}
}

448
css/_polls.scss Normal file
View File

@@ -0,0 +1,448 @@
.poll-dialog {
font-size: 1rem;
h1, span, li, strong {
color: #bce;
}
ol {
margin: 0;
}
}
.poll-question-field {
padding: 8px 16px;
padding-bottom: 24px;
border-bottom: 1px solid #525252;
}
.poll-header {
padding: 8px 16px;
}
.poll-answer-container{
padding: 8px;
background: #3D3D3D;
border-radius: 3px;
margin-bottom: 8px;
}
.poll-answer-field-list, .poll-answer-list, .poll-result-list {
list-style-type: none;
padding: 0 16px;
margin: 0;
}
ol.poll-result-list {
margin-bottom: 1.5em;
}
.poll-result-list > li {
margin-bottom: 8px;
}
.poll-answer-field {
flex-direction: column;
align-items: stretch;
margin-bottom: 16;
}
.poll-answer-field:last-child {
margin-bottom: 0;
}
.poll-create-option-row {
display: 'flex';
margin-bottom: 4;
}
// Needeed to override atlaskit default blue color
.poll-create-container .jsYMHu {
background: #292929;
border-color: #808090;
color: white // #808090
}
.poll-add-button {
display: flex;
justify-content: center;
padding: 8px 16px;
}
.poll-remove-option-button {
background: 0 0;
border: none;
color: #8B8B8B;
padding-left: 0;
}
.poll-create-add-option {
border: none;
background-color: #292929;
padding: 3px;
width: 100%;
}
.poll-icon-button, .poll-drag-handle {
.jitsi-icon svg {
fill: #bce;
}
}
.poll-drag-handle {
background-color: transparent;
border: none;
cursor: grab;
padding-left: 8;
display: flex;
}
.poll-dragged {
opacity: 0.5;
* {
cursor: grabbing !important;
}
}
.poll-question {
font-size: 1.2em;
font-weight: 600;
margin-bottom: 0.5em;
}
.poll-answer-voters {
font-size: 1em;
font-weight: lighter;
list-style-type: none;
border: #616161 solid 1px;
border-radius: 3px;
padding: 2px 6px;
margin: 4px 0px 12px;
background-color: #616161;
}
.poll-answer-header {
display: flex;
justify-content: space-between;
}
.poll-answer-vote-name {
flex-shrink: 1;
overflow-wrap: anywhere
}
.poll-answer-vote-count-container{
display: flex;
}
.poll-answer-vote-count {
margin-left: 10px;
white-space: nowrap;
flex: 1;
text-align: right;
}
.poll-answer-short-results{
display: flex;
min-width: 10em;
justify-content: space-between;
align-items: center;
}
.poll-bar-container, .poll-bar {
border-radius: 3px;
height: 6px;
}
.poll-bar-container {
background-color: #616161;
max-width: 160px;
margin-top: 3px;
flex: 1;
}
.poll-bar {
background-color: #246FE5;
}
.poll-message-footer {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 12px;
margin-top: 5px;
}
.poll-notice {
font-weight: 100;
margin-right: 10px;
}
.poll-show-details {
background-color: transparent;
border: none;
&:hover {
text-decoration: underline;
}
}
.poll-result-links {
display: flex;
flex-direction: row;
justify-content: space-between;
}
a.poll-detail-link, a.poll-change-vote-link {
color: #246FE5;
cursor: pointer;
text-decoration: none;
}
.polls-pane-content {
display: flex;
flex-direction: column;
font-weight: 600;
height: 85%;
align-items: stretch;
}
.pane-content{
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.empty-pane-icon {
width: 50%;
padding: 24px;
}
.empty-pane-icon svg {
fill: #3D3D3D;
width: 100%;
height: auto;
}
.empty-pane-message {
text-align: center;
}
.poll-results {
color: white;
}
.poll-answer {
h1, strong ,span {
color: white;
}
}
.poll-results, .poll-answer {
margin-bottom: 16px;
background: #292929;
border-radius: 8px;
padding: 12px 8px;
border-width: thin;
border-style: solid;
border-color: #616161;
}
.poll-create-label {
color: white;
margin-bottom: 4;
display: flex;
}
.expandable-input{
resize: none;
width: 100%;
height: 40px;
box-sizing: border-box;
overflow: hidden;
border: 1px solid #666666;
background-color: #141414;
color: #FFF;
border-radius: 6px;
padding: 10px 16px;
}
.poll-container {
box-sizing: border-box;
flex: 1;
overflow-y: auto;
position: relative;
padding: 16px;
& > * + *:not(.ignore-child) {
margin-top: 16px;
}
&::-webkit-scrollbar {
display: none;
}
}
.poll-create-header {
font-size: 20px;
margin: 20px 16px;
font-weight: 600;
}
.poll-create-container {
padding: 8px 0;
}
.poll-footer {
display: flex;
justify-content: flex-end;
padding: 8px 16px;
height: 40px;
align-items: stretch;
& > *:not(:last-child) {
margin-right: 16px;
}
}
.poll-primary-button {
align-items: center;
background-color: #0056E0;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
flex: 1;
&:hover {
background-color: #246FE5;
}
&:active {
background-color: #0045B3;
}
&:focus {
background-color: #0045B3;
border: 3px solid #99BBF3;
}
&:disabled {
background-color: #00225A;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
}
.poll-secondary-button {
align-items: center;
background-color: #3D3D3D;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
height: 40px;
width: 100%;
&:hover {
background-color: #525252;
}
&:active {
background-color: #292929;
}
&:focus {
background-color: #292929;
border: 3px solid #858585;
}
&:disabled {
background-color: #141414;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
}
.poll-small-primary-button {
align-items: center;
background-color: #0056E0;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
height: 40px;
width: 50%;
&:hover {
background-color: #246FE5;
}
&:active {
background-color: #0045B3;
}
&:focus {
background-color: #0045B3;
border: 3px solid #99BBF3;
}
&:disabled {
background-color: #00225A;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
}
.poll-small-secondary-button {
align-items: center;
background-color: #3D3D3D;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
height: 40px;
width: 50%;
&:hover {
background-color: #525252;
}
&:active {
background-color: #292929;
}
&:focus {
background-color: #292929;
border: 3px solid #858585;
}
&:disabled {
background-color: #141414;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
}

View File

@@ -1,153 +0,0 @@
.prejoin {
&-input-area {
margin: 0 auto;
text-align: center;
&-label {
display: block;
margin-bottom: 5px;
color: #ffffff;
font-weight: 300;
font-size: 15px;
line-height: 24px;
}
}
&-title {
color: #fff;
font-size: 24px;
line-height: 32px;
margin-bottom: 16px;
}
&-text-btns {
display: flex;
justify-content: space-between;
}
&-input-label {
color: #A4B8D1;
font-size: 13px;
line-height: 20px;
margin-top: 32px 0 8px 0;
text-align: center;
width: 100%;
}
&-checkbox {
border: 0;
height: 16px;
margin-right: 8px;
padding: 0;
width: 16px;
}
&-checkbox-container {
margin-bottom: 14px;
width: 100%;
}
&-error {
color: white;
background-color: rgba(225, 45, 45, 0.6);
border-radius: 3px;
width: 100%;
padding: 2px;
box-sizing: border-box;
margin-top: 4px;
font-size: 13px;
text-align: center;
}
}
@mixin name-placeholder {
color: #fff;
font-weight: 300;
opacity: 0.6;
}
.prejoin-preview {
&-status {
align-items: center;
align-self: stretch;
bottom: 0;
color: #fff;
display: flex;
font-size: 13px;
min-height: 24px;
justify-content: center;
position: absolute;
text-align: center;
width: 100%;
z-index: 1;
&--warning {
background: rgba(241, 173, 51, 1);
}
&--ok {
background: rgba(49, 183, 106, 1);
}
}
&-icon {
background-position: center;
background-repeat: no-repeat;
display: inline-block;
height: 16px;
margin-right: 8px;
width: 16px;
}
&-error-desc {
margin-right: 4px;
color: #fff;
font-weight: bold;
}
.settings-button-container {
width: 49px;
margin: 0 8px;
}
&-dropdown-btns {
width: 320px;
padding: 8px 0;
@include adjust-for-max-width(320px, 8px);
}
&-dropdown-btn {
align-items: center;
color: #1C2025;
cursor: pointer;
display: flex;
height: 40px;
font-size: 15px;
line-height: 24px;
padding: 0 16px;
&:hover {
background-color: #DAEBFA;
}
}
&-dropdown-icon {
display: inline-block;
margin-right: 16px;
& > svg {
fill: #1C2025;
}
}
&-dropdown-container {
margin-top: 16px;
& > div:nth-child(2) {
background: #fff;
padding: 0;
}
}
}

View File

@@ -48,6 +48,13 @@
display: flex;
align-items: center;
justify-content: center;
transition: font-size ease .1s;
@for $i from 1 through 12 {
&.increase-#{$i}{
font-size: calc(20px + #{$i}px);
}
}
}
}

View File

@@ -334,7 +334,7 @@
border-radius: 0;
display: flex;
justify-content: space-evenly;
padding: 6px 0;
padding: 8px 0;
width: 100%;
}

View File

@@ -264,3 +264,9 @@ $chromeExtensionBannerRightInMeeeting: 10px;
*/
$smallScreen: 700px;
$verySmallScreen: 500px;
/**
* Prejoin / premeeting screen
*/
$prejoinDefaultContentWidth: 336px;

View File

@@ -79,7 +79,6 @@ $flagsImagePath: "../images/";
@import 'filmstrip/vertical_filmstrip';
@import 'filmstrip/vertical_filmstrip_overrides';
@import 'labels';
@import 'lobby';
@import 'unsupported-browser/main';
@import 'modals/invite/add-people';
@import 'deep-linking/main';
@@ -95,18 +94,16 @@ $flagsImagePath: "../images/";
@import 'meter';
@import 'audio-preview';
@import 'video-preview';
@import 'prejoin';
@import 'prejoin-dialog';
@import 'premeeting/main';
@import 'country-picker';
@import 'modals/invite/invite_more';
@import 'modals/security/security';
@import 'premeeting-screens';
@import 'e2ee';
@import 'responsive';
@import 'connection-status';
@import 'drawer';
@import 'participants-pane';
@import 'reactions-menu';
@import 'plan-limit';
@import 'polls';
/* Modules END */

View File

@@ -1,32 +1,24 @@
.con-status {
border-radius: 6px;
color: #fff;
font-size: 12px;
letter-spacing: 0.16px;
line-height: 16px;
position: absolute;
top: 24px;
width: 100%;
z-index: $toolbarZ + 3;
&-container {
border-radius: 3px;
color: #fff;
font-size: 13px;
line-height: 13px;
margin: 0 auto;
width: 320px;
@include adjust-for-max-width(320px, 8px);
}
&-header {
background: rgba(28, 32, 37, .5);
background-color: rgba(0, 0, 0, 0.7);
align-items: center;
display: flex;
justify-content: space-between;
padding: 8px 12px;
}
&-circle {
border-radius: 50%;
display: inline-block;
padding: 4px;
margin: 8px;
margin-right: 16px;
}
&--good {
@@ -42,14 +34,7 @@
}
&-arrow {
height: 36px;
width: 36px;
border-radius: 3px;
margin-left: 8px;
margin-right: 2px;
display: flex;
align-items: center;
justify-content: center;
margin-left: auto;
transition: background-color 0.16s ease-out;
&--up {
@@ -70,7 +55,7 @@
}
&-details {
background: rgba(28, 32, 37, .5);
background-color: rgba(0, 0, 0, 0.7);
border-top: 1px solid #5E6D7A;
padding: 16px;
transition: opacity 0.16s ease-out;

View File

@@ -0,0 +1,35 @@
.device {
&-status {
align-items: center;
align-self: stretch;
color: #fff;
display: flex;
font-size: 14px;
font-weight: 400;
justify-content: center;
line-height: 20px;
margin-top: 8px;
padding: 6px;
text-align: center;
}
&-icon {
background-position: center;
background-repeat: no-repeat;
display: inline-block;
height: 16px;
margin-right: 10px;
width: 16px;
&--warning {
svg path {
fill: rgba(241, 173, 51, 1);
}
}
&--ok {
svg path {
fill: #189b55;
}
}
}
}

View File

@@ -1,18 +1,21 @@
#lobby-screen {
.content {
.lobby-screen {
font-size: 16px;
font-weight: 400;
line-height: 26px;
.container {
align-items: center;
display: flex;
flex-direction: column;
&-content {
align-items: center;
display: flex;
flex-direction: column;
.spinner {
margin: 30px;
}
.spinner {
margin: 8px;
}
.joining-message {
margin: 10px;
}
.joining-message {
color: white;
margin: 24px auto;
text-align: center;
}
}
}
@@ -51,6 +54,10 @@
top: 30px;
z-index: $toolbarZ + 1;
&:empty {
border: none;
}
&.toolbox-visible {
// Same as toolbox subject position
top: 120px;
@@ -64,7 +71,7 @@
button {
align-self: stretch;
margin: 8px 0;
margin-bottom: 8px 0;
padding: 12px;
transition: .2s transform ease;

View File

@@ -0,0 +1,7 @@
@import 'connection-status';
@import 'device-status';
@import 'lobby';
@import 'premeeting-screens';
@import 'prejoin';
@import 'prejoin-dialog';
@import 'prejoin-third-party';

View File

@@ -0,0 +1,39 @@
$sidePanelWidth: 300px;
.prejoin-third-party {
flex-direction: column-reverse;
.content {
height: auto;
margin: 0 auto;
.new-toolbox {
width: auto;
}
}
#preview {
background-color: transparent;
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: 0;
.avatar {
display: none;
}
}
&.splash {
.content {
margin-left: calc((100% - #{$prejoinDefaultContentWidth} + #{$sidePanelWidth}) / 2)
}
}
&.guest {
.content {
margin-bottom: auto;
}
}
}

View File

@@ -0,0 +1,73 @@
.prejoin {
&-input-area {
width: 100%;
}
&-checkbox-container {
margin-bottom: 16px;
width: 100%;
text-align: center;
}
&-error {
color: white;
background-color: #E04757;
border-radius: 6px;
padding: 4px;
box-sizing: border-box;
margin-bottom: 16px;
margin-top: -8px;
font-size: 12px;
text-align: center;
width: 100%;
}
}
.prejoin-preview {
&-dropdown-btns {
padding: 8px 0;
width: calc(100% - 48px);
}
&-dropdown-btn {
align-items: center;
color: #1C2025;
cursor: pointer;
display: flex;
height: 40px;
font-size: 15px;
line-height: 24px;
padding: 0 16px;
&:hover {
background-color: #DAEBFA;
}
}
&-dropdown-icon {
display: inline-block;
margin-right: 16px;
& > svg {
fill: #1C2025;
}
}
&-dropdown-container {
position: relative;
width: 100%;
/**
* Override default InlineDialog behaviour, since it does not play nicely with relative widths
*/
& > div:nth-child(2) {
background: #fff;
padding: 0;
position: absolute !important;
top: 48px !important;
transform: none !important;
width: 100%;
}
}
}

View File

@@ -1,47 +1,27 @@
/**
* Shared style for full screen local track based dialogs/modals.
*/
.premeeting-screen {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.premeeting-screen {
align-items: stretch;
background: radial-gradient(50% 50% at 50% 50%, #2A3A4B 20.83%, #1E2A36 100%);
background: #292929;
bottom: 0;
display: flex;
flex-direction: column;
font-size: 1.3em;
left: 0;
position: absolute;
right: 0;
top: 0;
z-index: $toolbarZ + 1;
&-avatar {
background-color: #A4B8D1;
margin-bottom: 24px;
text {
fill: black;
font-size: 26px;
font-weight: 400;
}
}
.action-btn {
border-radius: 3px;
border-radius: 6px;
box-sizing: border-box;
color: #fff;
cursor: pointer;
display: inline-block;
font-size: 15px;
font-size: 14px;
line-height: 24px;
margin-bottom: 16px;
padding: 7px 16px;
position: relative;
text-align: center;
width: 320px;
@include adjust-for-max-width(320px, 8px);
width: 100%;
&.primary {
background: #0376DA;
@@ -49,8 +29,8 @@
}
&.secondary {
background: transparent;
border: 1px solid #5E6D7A;
background: #3D3D3D;
border: 1px solid transparent;
}
&.text {
@@ -96,130 +76,150 @@
.content {
align-items: center;
box-sizing: border-box;
display: flex;
flex: 1;
flex-direction: column;
justify-content: flex-end;
padding-bottom: 24px;
flex-shrink: 0;
height: 100%;
margin: 0 110px;
padding: 24px 0 16px;
position: relative;
width: $prejoinDefaultContentWidth;
z-index: $toolbarZ + 2;
.title {
color: #fff;
font-size: 24px;
line-height: 32px;
margin-bottom: 16px;
}
.copy-meeting {
&-controls {
align-items: center;
cursor: pointer;
color: #fff;
display: flex;
flex-direction: column;
font-size: 15px;
font-weight: 300;
justify-content: center;
line-height: 24px;
margin-bottom: 16px;
margin: auto;
width: 100%;
.url {
background: rgba(28, 32, 37, 0.5);
border-radius: 4px;
display: flex;
padding: 8px 10px;
transition: background 0.16s ease-out;
&:hover {
background: #1C2025;
.title {
color: #fff;
font-size: 28px;
font-weight: 600;
letter-spacing: -0.015;
line-height: 36px;
margin-bottom: 32px;
text-align: center;
}
input.field {
background-color: white;
border: none;
outline: none;
border-radius: 6px;
font-size: 14px;
line-height: 20px;
margin-bottom: 16px;
color: #1C2025;
padding: 10px 16px;
text-align: center;
width: 100%;
&.error {
border: 1px solid #E04757;
}
&.done {
background: #31B76A;
}
.jitsi-icon {
margin-left: 10px;
&.focused {
box-shadow: 0px 0px 1px 1.5px black, 0px 0px 1.3px 4px white;
}
}
.copy-button{
width: 298px;
}
.copy-meeting-text {
width: 266px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#new-toolbox {
bottom: 0;
margin-bottom: 16px;
position: relative;
transition: none;
&:hover {
align-self: stretch;
}
textarea {
border-width: 0;
height: 0;
opacity: 0;
padding: 0;
width: 0;
}
}
input.field {
background-color: white;
border: none;
outline: none;
border-radius: 3px;
font-size: 15px;
line-height: 24px;
color: #1C2025;
padding: 8px 0;
text-align: center;
width: 320px;
@include adjust-for-max-width(320px, 8px);
&.error {
box-shadow: 0px 0px 4px 3px rgba(225, 45, 45, 0.4);
}
&.focused {
box-shadow: 0px 0px 1px 1.5px black, 0px 0px 1.3px 4px white;
.toolbox-content,
.toolbox-content-wrapper,
.toolbox-content-items {
box-sizing: border-box;
width: 100%;
}
}
}
}
.media-btn-container {
display: flex;
justify-content: center;
margin: 24px 0 16px 0;
width: 100%;
&> div {
margin: 0 12px;
@media (max-width: 1000px) {
flex-direction: column-reverse;
.content {
height: auto;
margin: 0 auto;
}
.con-status {
margin: 24px auto;
position: fixed;
top: 0;
width: $prejoinDefaultContentWidth;
}
}
@media (max-width: 400px) {
.content {
padding: 16px;
width: 100%;
.title {
font-size: 20px;
line-height: 28px;
letter-spacing: -0.012;
margin-bottom: 24px;
}
}
.con-status {
margin: 16px;
width: calc(100% - 32px);
}
input.field {
font-size: 16px;
padding: 14px 16px;
}
.action-btn {
font-size: 16px;
padding: 11px 16px;
}
.toolbox-content-items {
border-radius: 0;
display: flex;
justify-content: space-evenly;
padding: 8px 0;
}
}
input::placeholder {
color: #040404;
}
}
#preview {
background: #040404;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
position: absolute;
width: 100%;
&.no-video {
background: radial-gradient(50% 50% at 50% 50%, #5B6F80 0%, #365067 100%), #FFFFFF;
text-align: center;
}
.avatar {
background: #A4B8D1;
margin: 0 auto;
background: #0045B3;
text {
fill: white;
font-size: 26px;
font-weight: 400;
}
}
video {
height: 100%;
object-fit: cover;
position: absolute;
width: 100%;
}
}
@@ -241,16 +241,14 @@
}
.toggle-button {
border-radius: 3px;
border-radius: 6px;
cursor: pointer;
color: #fff;
font-size: 13px;
height: 40px;
margin: 0 auto;
transition: background 0.16s ease-out;
width: 320px;
@include adjust-for-max-width(320px, 8px);
@include flex-centered();
svg {

2
debian/control vendored
View File

@@ -33,7 +33,7 @@ Description: Configuration for web serving of Jitsi Meet
Package: jitsi-meet-prosody
Architecture: all
Depends: openssl, prosody | prosody-trunk | prosody-0.11, lua-sec
Depends: openssl, prosody (>= 0.11.0) | prosody-trunk | prosody-0.11, lua-sec
Replaces: jitsi-meet-tokens
Description: Prosody configuration for Jitsi Meet
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi

View File

@@ -65,6 +65,7 @@ Component "conference.jitmeet.example.com" "muc"
modules_enabled = {
"muc_meeting_id";
"muc_domain_mapper";
"polls";
--"token_verification";
}
admins = { "focusUser@auth.jitmeet.example.com" }

View File

@@ -25,8 +25,16 @@
Component: JitsiMeetJS.app.entryPoints.APP
})
const inIframe = () => {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
};
const isElectron = navigator.userAgent.includes('Electron');
const shouldRegisterWorker = !isElectron && 'serviceWorker' in navigator;
const shouldRegisterWorker = !isElectron && !inIframe() && 'serviceWorker' in navigator;
if (shouldRegisterWorker) {
navigator.serviceWorker

View File

@@ -224,7 +224,8 @@ var interfaceConfig = {
// Determines how the video would fit the screen. 'both' would fit the whole
// screen, 'height' would fit the original video height to the height of the
// screen, 'width' would fit the original video width to the width of the
// screen respecting ratio.
// screen respecting ratio, 'nocrop' would make the video as large as
// possible and preserve aspect ratio without cropping.
VIDEO_LAYOUT_FIT: 'both',
/**

View File

@@ -29,7 +29,7 @@ target 'JitsiMeetSDK' do
'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'
@@ -54,6 +54,7 @@ target 'JitsiMeetSDK' do
# 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-keep-awake', :path => '../node_modules/react-native-keep-awake'
@@ -75,7 +76,7 @@ target 'JitsiMeetSDK' do
#
pod 'CocoaLumberjack', '~>3.5.3'
pod 'ObjectiveDropboxOfficial', '~> 3.9.4'
pod 'ObjectiveDropboxOfficial', '~>6.1.0'
use_native_modules!
end

View File

@@ -1,4 +1,8 @@
PODS:
- Amplitude (8.2.0)
- amplitude-react-native (2.3.3):
- Amplitude (= 8.2.0)
- React-Core
- AppAuth (1.4.0):
- AppAuth/Core (= 1.4.0)
- AppAuth/ExternalUserAgent (= 1.4.0)
@@ -111,7 +115,7 @@ PODS:
- nanopb/encode (= 1.30906.0)
- nanopb/decode (1.30906.0)
- nanopb/encode (1.30906.0)
- ObjectiveDropboxOfficial (3.9.4)
- ObjectiveDropboxOfficial (6.1.0)
- PromisesObjC (1.2.12)
- RCTRequired (0.61.5-jitsi.2)
- RCTTypeSafety (0.61.5-jitsi.2):
@@ -293,7 +297,7 @@ PODS:
- react-native-video/Video (= 5.1.1)
- react-native-video/Video (5.1.1):
- React-Core
- react-native-webrtc (1.92.0):
- react-native-webrtc (1.92.1):
- React-Core
- react-native-webview (11.0.2):
- React-Core
@@ -372,6 +376,7 @@ PODS:
- Yoga (1.14.0)
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/`)
@@ -381,7 +386,7 @@ DEPENDENCIES:
- 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 (~> 3.9.4)
- ObjectiveDropboxOfficial (~> 6.1.0)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired/`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety/`)
- React (from `../node_modules/react-native/`)
@@ -423,6 +428,7 @@ DEPENDENCIES:
SPEC REPOS:
trunk:
- Amplitude
- AppAuth
- boost-for-react-native
- CocoaLumberjack
@@ -444,6 +450,8 @@ SPEC REPOS:
- PromisesObjC
EXTERNAL SOURCES:
amplitude-react-native:
:path: "../node_modules/@amplitude/react-native"
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector:
@@ -528,6 +536,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
Amplitude: 263118b9e691e73a1c864b05bb08a3aff3636d16
amplitude-react-native: 833a4bd7f656f826bda1de01a7b8593b58842209
AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
@@ -550,7 +560,7 @@ SPEC CHECKSUMS:
GTMAppAuth: ad5c2b70b9a8689e1a04033c9369c4915bfcbe89
GTMSessionFetcher: 36689134877faeb055b27dfa4ccc9ceaa42e029e
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
ObjectiveDropboxOfficial: a5afefc83f6467c42c45f2253f583f2ad1ffc701
ObjectiveDropboxOfficial: b4765572e334d6fc6214b43a7595510324bbbbaa
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
RCTRequired: a686731276578c125dff205f08b6ec9cee6ede32
RCTTypeSafety: 88e5500e801c00d16a3d1895e3470d13beed6584
@@ -568,7 +578,7 @@ SPEC CHECKSUMS:
react-native-slider: b733e17fdd31186707146debf1f04b5d94aa1a93
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-video: 1574074179ecaf6a9dd067116c8f31bf9fec15c8
react-native-webrtc: bbb644859dcc37ccb7edaec860ca62ed47bf996c
react-native-webrtc: 77b969fe6bc5b7c93b455f93a13698812fb8bb4e
react-native-webview: b2542d6fd424bcc3e3b2ec5f854f0abb4ec86c87
React-RCTActionSheet: bcbc311dc3b47bc8efb2737ff0940239a45789a9
React-RCTAnimation: 65f61080ce632f6dea23d52e354ffac9948396c6
@@ -589,6 +599,6 @@ SPEC CHECKSUMS:
RNWatch: a5320c959c75e72845c07985f3e935e58998f1d3
Yoga: 96b469c5e81ff51b917b92e8c3390642d4ded30c
PODFILE CHECKSUM: f4db44d934caeae7212dbaa33abe62ed164363e8
PODFILE CHECKSUM: 6f4485ed41286517917d47d2170b0de97d32bbfb
COCOAPODS: 1.10.1

View File

@@ -23,6 +23,7 @@
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */; };
4E90F9402632D1AB001102D4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E90F93F2632D1AB001102D4 /* Atomic.swift */; };
4EB06024260E026600F524C5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC49B8625BED71300E76218 /* ReplayKit.framework */; };
4EB06027260E026600F524C5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06026260E026600F524C5 /* SampleHandler.swift */; };
@@ -30,7 +31,6 @@
4EB0603C260E09D000F524C5 /* SocketConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06039260E09D000F524C5 /* SocketConnection.swift */; };
4EB0603D260E09D000F524C5 /* DarwinNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */; };
4EB0603E260E09D000F524C5 /* SampleUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603B260E09D000F524C5 /* SampleUploader.swift */; };
55BEDABDA92D47D399A70A5E /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D878B07B3FBD6E305EAA6B27 /* libPods-JitsiMeet.a */; };
DE050389256E904600DEE3A5 /* WebRTC.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE050388256E904600DEE3A5 /* WebRTC.xcframework */; };
DE05038A256E904600DEE3A5 /* WebRTC.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DE050388256E904600DEE3A5 /* WebRTC.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */; };
@@ -113,7 +113,6 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
09AA3B93E4CC62D84B424690 /* Pods-jitsi-meet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-jitsi-meet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-jitsi-meet/Pods-jitsi-meet.release.xcconfig"; sourceTree = "<group>"; };
0B26BE6D1EC5BC3C00EEFB41 /* JitsiMeet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JitsiMeet.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0B412F1D1EDEE6E800B1A0A6 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
@@ -139,7 +138,7 @@
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
4670A512A688E2DC34528282 /* Pods-jitsi-meet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-jitsi-meet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-jitsi-meet/Pods-jitsi-meet.debug.xcconfig"; sourceTree = "<group>"; };
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
4E90F93F2632D1AB001102D4 /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = JitsiMeetBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
4EB06026260E026600F524C5 /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
@@ -149,11 +148,9 @@
4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarwinNotificationCenter.swift; sourceTree = "<group>"; };
4EB0603B260E09D000F524C5 /* SampleUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleUploader.swift; sourceTree = "<group>"; };
4EC49B8625BED71300E76218 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
5FEF9D87A4D2A38AD7193308 /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet-JitsiMeetBroadcastExtension/Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig"; sourceTree = "<group>"; };
609CB2080B75F75A89923F3D /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
A7B2827E068A0E05260054AC /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet-JitsiMeetBroadcastExtension/Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig"; sourceTree = "<group>"; };
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
B3B083EB1D4955FF0069CEE7 /* app.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = app.entitlements; sourceTree = "<group>"; };
D878B07B3FBD6E305EAA6B27 /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
DE050388256E904600DEE3A5 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/apple/WebRTC.xcframework"; sourceTree = "<group>"; };
DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRUtilities.m; sourceTree = "<group>"; };
DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRUtilities.h; sourceTree = "<group>"; };
@@ -161,7 +158,6 @@
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/ios/WebRTC.xcframework"; sourceTree = "<group>"; };
E58801132278944E008B0561 /* JitsiMeetContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetContext.swift; sourceTree = "<group>"; };
E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetCommands.swift; sourceTree = "<group>"; };
FC040BBED70876444D89E91C /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -178,7 +174,7 @@
files = (
DE050389256E904600DEE3A5 /* WebRTC.xcframework in Frameworks */,
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
55BEDABDA92D47D399A70A5E /* libPods-JitsiMeet.a in Frameworks */,
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -208,8 +204,8 @@
0B26BE6D1EC5BC3C00EEFB41 /* JitsiMeet.framework */,
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */,
0BD6B4361EF82A6B00D1F4CD /* WebRTC.framework */,
D878B07B3FBD6E305EAA6B27 /* libPods-JitsiMeet.a */,
4EC49B8625BED71300E76218 /* ReplayKit.framework */,
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -278,19 +274,6 @@
sourceTree = "<group>";
tabWidth = 4;
};
5E96ADD5E49F3B3822EF9A52 /* Pods */ = {
isa = PBXGroup;
children = (
4670A512A688E2DC34528282 /* Pods-jitsi-meet.debug.xcconfig */,
09AA3B93E4CC62D84B424690 /* Pods-jitsi-meet.release.xcconfig */,
609CB2080B75F75A89923F3D /* Pods-JitsiMeet.debug.xcconfig */,
FC040BBED70876444D89E91C /* Pods-JitsiMeet.release.xcconfig */,
A7B2827E068A0E05260054AC /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig */,
5FEF9D87A4D2A38AD7193308 /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
};
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
@@ -298,10 +281,10 @@
0B26BE711EC5BC4D00EEFB41 /* Frameworks */,
83CBBA001A601CBA00E9B192 /* Products */,
13B07FAE1A68108700A75B9A /* src */,
5E96ADD5E49F3B3822EF9A52 /* Pods */,
0BEA5C261F7B8F73000D0AB4 /* Watch app */,
0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */,
4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */,
CDD71F5E1157E9F283DF92A8 /* Pods */,
);
indentWidth = 2;
sourceTree = "<group>";
@@ -318,6 +301,16 @@
name = Products;
sourceTree = "<group>";
};
CDD71F5E1157E9F283DF92A8 /* Pods */ = {
isa = PBXGroup;
children = (
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */,
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */,
);
name = Pods;
path = ../Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -360,7 +353,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */;
buildPhases = (
B6607F42A5CF0C76E98929E2 /* [CP] Check Pods Manifest.lock */,
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */,
0BBA83C41EC9F7600075A103 /* Run React packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
@@ -523,7 +516,7 @@
shellPath = /bin/sh;
shellScript = "../scripts/run-packager.sh\n";
};
B6607F42A5CF0C76E98929E2 /* [CP] Check Pods Manifest.lock */ = {
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -825,7 +818,7 @@
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 609CB2080B75F75A89923F3D /* Pods-JitsiMeet.debug.xcconfig */;
baseConfigurationReference = 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug;
@@ -855,7 +848,7 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = FC040BBED70876444D89E91C /* Pods-JitsiMeet.release.xcconfig */;
baseConfigurationReference = 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease;

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>21.3.0</string>
<string>21.4.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.3.0</string>
<string>21.4.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.3.0</string>
<string>21.4.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.3.0</string>
<string>21.4.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CLKComplicationPrincipalClass</key>

View File

@@ -10,8 +10,6 @@
0B412F181EDEC65D00B1A0A6 /* JitsiMeetView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */; settings = {ATTRIBUTES = (Public, ); }; };
0B412F191EDEC65D00B1A0A6 /* JitsiMeetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */; };
0B412F221EDEF6EA00B1A0A6 /* JitsiMeetViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F1B1EDEC80100B1A0A6 /* JitsiMeetViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
0B49424520AD8DBD00BD2DE0 /* outgoingStart.wav in Resources */ = {isa = PBXBuildFile; fileRef = 0B49424320AD8DBD00BD2DE0 /* outgoingStart.wav */; };
0B49424620AD8DBD00BD2DE0 /* outgoingRinging.wav in Resources */ = {isa = PBXBuildFile; fileRef = 0B49424420AD8DBD00BD2DE0 /* outgoingRinging.wav */; };
0B93EF7E1EC9DDCD0030D24D /* RCTBridgeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B93EF7C1EC9DDCD0030D24D /* RCTBridgeWrapper.h */; };
0B93EF7F1EC9DDCD0030D24D /* RCTBridgeWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B93EF7D1EC9DDCD0030D24D /* RCTBridgeWrapper.m */; };
0BA13D311EE83FF8007BEF7F /* ExternalAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BA13D301EE83FF8007BEF7F /* ExternalAPI.m */; };
@@ -26,16 +24,8 @@
0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; };
4E51B76425E5345E0038575A /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; };
4E51B76525E5345E0038575A /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; };
6C31EDC820C06D490089C899 /* recordingOn.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC720C06D490089C899 /* recordingOn.mp3 */; };
6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC920C06D530089C899 /* recordingOff.mp3 */; };
6F08DF7D4458EE3CF3F36F6D /* libPods-JitsiMeetSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */; };
75635B0A20751D6D00F29C9F /* joined.wav in Resources */ = {isa = PBXBuildFile; fileRef = 75635B0820751D6D00F29C9F /* joined.wav */; };
75635B0B20751D6D00F29C9F /* left.wav in Resources */ = {isa = PBXBuildFile; fileRef = 75635B0920751D6D00F29C9F /* left.wav */; };
87FE6F3321E52437004A5DC7 /* incomingMessage.wav in Resources */ = {isa = PBXBuildFile; fileRef = 87FE6F3221E52437004A5DC7 /* incomingMessage.wav */; };
A4414AE020B37F1A003546E6 /* rejected.wav in Resources */ = {isa = PBXBuildFile; fileRef = A4414ADF20B37F1A003546E6 /* rejected.wav */; };
A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */ = {isa = PBXBuildFile; fileRef = A4A934E8212F3ADB001E9388 /* Dropbox.m */; };
C30F88D0CB0F4F5593216D24 /* liveStreamingOff.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */; };
C30F88D2CB0F4F5593216D24 /* liveStreamingOn.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */; };
C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5B2053091D0040BE68 /* image-resize@2x.png */; };
C6245F5E2053091D0040BE68 /* image-resize@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5C2053091D0040BE68 /* image-resize@3x.png */; };
C69EFA0C209A0F660027712B /* JMCallKitEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */; };
@@ -70,8 +60,6 @@
0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JitsiMeetView.h; sourceTree = "<group>"; };
0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetView.m; sourceTree = "<group>"; };
0B412F1B1EDEC80100B1A0A6 /* JitsiMeetViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetViewDelegate.h; sourceTree = "<group>"; };
0B49424320AD8DBD00BD2DE0 /* outgoingStart.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = outgoingStart.wav; path = ../../sounds/outgoingStart.wav; sourceTree = "<group>"; };
0B49424420AD8DBD00BD2DE0 /* outgoingRinging.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = outgoingRinging.wav; path = ../../sounds/outgoingRinging.wav; sourceTree = "<group>"; };
0B93EF7A1EC608550030D24D /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
0B93EF7C1EC9DDCD0030D24D /* RCTBridgeWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBridgeWrapper.h; sourceTree = "<group>"; };
0B93EF7D1EC9DDCD0030D24D /* RCTBridgeWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBridgeWrapper.m; sourceTree = "<group>"; };
@@ -89,19 +77,11 @@
0BD906E91EC0C00300C8C18E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScheenshareEventEmiter.h; sourceTree = "<group>"; };
4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScheenshareEventEmiter.m; sourceTree = "<group>"; };
6C31EDC720C06D490089C899 /* recordingOn.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = recordingOn.mp3; path = ../../sounds/recordingOn.mp3; sourceTree = "<group>"; };
6C31EDC920C06D530089C899 /* recordingOff.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = recordingOff.mp3; path = ../../sounds/recordingOff.mp3; sourceTree = "<group>"; };
75635B0820751D6D00F29C9F /* joined.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = joined.wav; path = ../../sounds/joined.wav; sourceTree = "<group>"; };
75635B0920751D6D00F29C9F /* left.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = left.wav; path = ../../sounds/left.wav; sourceTree = "<group>"; };
87FE6F3221E52437004A5DC7 /* incomingMessage.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = incomingMessage.wav; path = ../../sounds/incomingMessage.wav; sourceTree = "<group>"; };
891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDK.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK.release.xcconfig"; sourceTree = "<group>"; };
98E09B5C73D9036B4ED252FC /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
9C77CA3CC919B081F1A52982 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
A4414ADF20B37F1A003546E6 /* rejected.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = rejected.wav; path = ../../sounds/rejected.wav; sourceTree = "<group>"; };
A4A934E8212F3ADB001E9388 /* Dropbox.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Dropbox.m; sourceTree = "<group>"; };
A4A934EB21349A06001E9388 /* Dropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dropbox.h; sourceTree = "<group>"; };
C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = liveStreamingOff.mp3; path = ../../sounds/liveStreamingOff.mp3; sourceTree = "<group>"; };
C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = liveStreamingOn.mp3; path = ../../sounds/liveStreamingOn.mp3; sourceTree = "<group>"; };
C6245F5B2053091D0040BE68 /* image-resize@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@2x.png"; path = "src/picture-in-picture/image-resize@2x.png"; sourceTree = "<group>"; };
C6245F5C2053091D0040BE68 /* image-resize@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@3x.png"; path = "src/picture-in-picture/image-resize@3x.png"; sourceTree = "<group>"; };
C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JMCallKitEmitter.swift; sourceTree = "<group>"; };
@@ -155,19 +135,9 @@
0BCA49681EC4BBE500B793EE /* Resources */ = {
isa = PBXGroup;
children = (
87FE6F3221E52437004A5DC7 /* incomingMessage.wav */,
0BC4B8681F8C01E100CE8B21 /* CallKitIcon.png */,
C6245F5B2053091D0040BE68 /* image-resize@2x.png */,
C6245F5C2053091D0040BE68 /* image-resize@3x.png */,
75635B0820751D6D00F29C9F /* joined.wav */,
75635B0920751D6D00F29C9F /* left.wav */,
C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */,
C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */,
0B49424420AD8DBD00BD2DE0 /* outgoingRinging.wav */,
0B49424320AD8DBD00BD2DE0 /* outgoingStart.wav */,
6C31EDC920C06D530089C899 /* recordingOff.mp3 */,
6C31EDC720C06D490089C899 /* recordingOn.mp3 */,
A4414ADF20B37F1A003546E6 /* rejected.wav */,
);
name = Resources;
sourceTree = "<group>";
@@ -328,6 +298,7 @@
0BD906E11EC0C00300C8C18E /* Frameworks */,
0BD906E21EC0C00300C8C18E /* Headers */,
0BD906E31EC0C00300C8C18E /* Resources */,
DE17D0D426E0B86300F77E2E /* Copy sounds */,
0BCA49651EC4B77500B793EE /* Package React bundle */,
C7BC10B338C94EEB98048E64 /* [CP] Copy Pods Resources */,
);
@@ -379,18 +350,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
87FE6F3321E52437004A5DC7 /* incomingMessage.wav in Resources */,
0B49424520AD8DBD00BD2DE0 /* outgoingStart.wav in Resources */,
C30F88D0CB0F4F5593216D24 /* liveStreamingOff.mp3 in Resources */,
C30F88D2CB0F4F5593216D24 /* liveStreamingOn.mp3 in Resources */,
6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */,
A4414AE020B37F1A003546E6 /* rejected.wav in Resources */,
0B49424620AD8DBD00BD2DE0 /* outgoingRinging.wav in Resources */,
C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */,
6C31EDC820C06D490089C899 /* recordingOn.mp3 in Resources */,
0BC4B8691F8C03A700CE8B21 /* CallKitIcon.png in Resources */,
75635B0B20751D6D00F29C9F /* left.wav in Resources */,
75635B0A20751D6D00F29C9F /* joined.wav in Resources */,
C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */,
C6245F5E2053091D0040BE68 /* image-resize@3x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -437,10 +398,12 @@
);
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",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaDomainValidationCA.der",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
@@ -448,6 +411,24 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK-resources.sh\"\n";
showEnvVarsInLog = 0;
};
DE17D0D426E0B86300F77E2E /* Copy sounds */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Copy sounds";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "SOUNDS_DIR=\"${PROJECT_DIR}/../../sounds\"\n\ncp $SOUNDS_DIR/* ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\n";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */

View File

@@ -125,12 +125,19 @@ RCT_EXPORT_MODULE();
return _workerQueue;
}
- (BOOL)setConfigWithoutLock:(RTCAudioSessionConfiguration *)config
error:(NSError * _Nullable *)outError {
RTCAudioSession *session = [RTCAudioSession sharedInstance];
return [session setConfiguration:config error:outError];
}
- (BOOL)setConfig:(RTCAudioSessionConfiguration *)config
error:(NSError * _Nullable *)outError {
RTCAudioSession *session = [RTCAudioSession sharedInstance];
[session lockForConfiguration];
BOOL success = [session setConfiguration:config error:outError];
BOOL success = [self setConfigWithoutLock:config error:outError];
[session unlockForConfiguration];
return success;
@@ -196,7 +203,7 @@ RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
break;
}
}
if (port != nil) {
// First remove the override if we are going to select a different device.
if (isSpeakerOn) {
@@ -206,11 +213,11 @@ RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
// Special case for the earpiece.
if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
forceEarpiece = YES;
[self setConfig:earpieceConfig error:nil];
[self setConfigWithoutLock:earpieceConfig error:nil];
} else if (isEarpieceOn) {
// Reset the config.
RTCAudioSessionConfiguration *config = [self configForMode:activeMode];
[self setConfig:config error:nil];
[self setConfigWithoutLock:config error:nil];
}
// Select our preferred input.

View File

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

View File

@@ -29,10 +29,6 @@
* Room name.
*/
@property (nonatomic, copy, nullable) NSString *room;
/**
* Conference subject.
*/
@property (nonatomic, copy, nullable) NSString *subject;
/**
* JWT token used for authentication.
*/
@@ -49,13 +45,7 @@
*/
@property (nonatomic, readonly, nonnull) NSDictionary *featureFlags;
/**
* Set to YES to join the conference with audio / video muted or to start in audio
* only mode respectively.
*/
@property (nonatomic) BOOL audioOnly;
@property (nonatomic) BOOL audioMuted;
@property (nonatomic) BOOL videoMuted;
@property (nonatomic, readonly, nonnull) NSDictionary *config;
/**
* Set to YES to enable the welcome page. Typically SDK users won't need this enabled
@@ -71,15 +61,17 @@
- (void)setFeatureFlag:(NSString *_Nonnull)flag withBoolean:(BOOL)value;
- (void)setFeatureFlag:(NSString *_Nonnull)flag withValue:(id _Nonnull)value;
/**
* CallKit call handle, to be used when implementing incoming calls.
*/
@property (nonatomic, copy, nullable) NSString *callHandle;
- (void)setConfigOverride:(NSString *_Nonnull)config withBoolean:(BOOL)value;
- (void)setConfigOverride:(NSString *_Nonnull)config withValue:(id _Nonnull)value;
- (void)setConfigOverride:(NSString *_Nonnull)config withDictionary:(NSDictionary * _Nonnull)dictionary;
- (void)setConfigOverride:(NSString *_Nonnull)config withArray:( NSArray * _Nonnull)array;
/**
* CallKit call UUID, to be used when implementing incoming calls.
*/
@property (nonatomic, copy, nullable) NSUUID *callUUID;
- (void)setAudioOnly:(BOOL)audioOnly;
- (void)setAudioMuted:(BOOL)audioMuted;
- (void)setVideoMuted:(BOOL)videoMuted;
- (void)setCallHandle:(NSString *_Nonnull)callHandle;
- (void)setCallUUID:(NSUUID *_Nonnull)callUUID;
- (void)setSubject:(NSString *_Nonnull)subject;
@end
@@ -88,23 +80,15 @@
@property (nonatomic, copy, nullable, readonly) NSURL *serverURL;
@property (nonatomic, copy, nullable, readonly) NSString *room;
@property (nonatomic, copy, nullable, readonly) NSString *subject;
@property (nonatomic, copy, nullable, readonly) NSString *token;
@property (nonatomic, copy, nullable) NSDictionary *colorScheme;
@property (nonatomic, readonly, nonnull) NSDictionary *featureFlags;
@property (nonatomic, readonly) BOOL audioOnly;
@property (nonatomic, readonly) BOOL audioMuted;
@property (nonatomic, readonly) BOOL videoMuted;
@property (nonatomic, readonly) BOOL welcomePageEnabled;
@property (nonatomic, nullable) JitsiMeetUserInfo *userInfo;
@property (nonatomic, copy, nullable, readonly) NSString *callHandle;
@property (nonatomic, copy, nullable, readonly) NSUUID *callUUID;
+ (instancetype _Nonnull)fromBuilder:(void (^_Nonnull)(JitsiMeetConferenceOptionsBuilder *_Nonnull))initBlock;
- (instancetype _Nonnull)init NS_UNAVAILABLE;

View File

@@ -26,35 +26,23 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
@implementation JitsiMeetConferenceOptionsBuilder {
NSNumber *_audioOnly;
NSNumber *_audioMuted;
NSNumber *_videoMuted;
NSMutableDictionary *_featureFlags;
NSMutableDictionary *_config;
}
@dynamic audioOnly;
@dynamic audioMuted;
@dynamic videoMuted;
@dynamic welcomePageEnabled;
- (instancetype)init {
if (self = [super init]) {
_serverURL = nil;
_room = nil;
_subject = nil;
_token = nil;
_colorScheme = nil;
_config = [[NSMutableDictionary alloc] init];
_featureFlags = [[NSMutableDictionary alloc] init];
_audioOnly = nil;
_audioMuted = nil;
_videoMuted = nil;
_userInfo = nil;
_callHandle = nil;
_callUUID = nil;
}
return self;
@@ -68,32 +56,48 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
_featureFlags[flag] = value;
}
#pragma mark - Dynamic properties
- (void)setAudioOnly:(BOOL)audioOnly {
_audioOnly = [NSNumber numberWithBool:audioOnly];
}
- (BOOL)audioOnly {
return _audioOnly && [_audioOnly boolValue];
[self setConfigOverride:@"startAudioOnly" withBoolean:audioOnly];
}
- (void)setAudioMuted:(BOOL)audioMuted {
_audioMuted = [NSNumber numberWithBool:audioMuted];
}
- (BOOL)audioMuted {
return _audioMuted && [_audioMuted boolValue];
[self setConfigOverride:@"startWithAudioMuted" withBoolean:audioMuted];
}
- (void)setVideoMuted:(BOOL)videoMuted {
_videoMuted = [NSNumber numberWithBool:videoMuted];
[self setConfigOverride:@"startWithVideoMuted" withBoolean:videoMuted];
}
- (BOOL)videoMuted {
return _videoMuted && [_videoMuted boolValue];
- (void)setCallHandle:(NSString *_Nonnull)callHandle {
[self setConfigOverride:@"callHandle" withValue:callHandle];
}
- (void)setCallUUID:(NSUUID *_Nonnull)callUUID {
[self setConfigOverride:@"callUUID" withValue:[callUUID UUIDString]];
}
- (void)setSubject:(NSString *_Nonnull)subject {
[self setConfigOverride:@"subject" withValue:subject];
}
- (void)setConfigOverride:(NSString *_Nonnull)config withBoolean:(BOOL)value {
[self setConfigOverride:config withValue:[NSNumber numberWithBool:value]];
}
- (void)setConfigOverride:(NSString *_Nonnull)config withDictionary:(NSDictionary*)dictionary {
_config[config] = dictionary;
}
- (void)setConfigOverride:(NSString *_Nonnull)config withArray:( NSArray * _Nonnull)array {
_config[config] = array;
}
- (void)setConfigOverride:(NSString *_Nonnull)config withValue:(id _Nonnull)value {
_config[config] = value;
}
#pragma mark - Dynamic properties
- (void)setWelcomePageEnabled:(BOOL)welcomePageEnabled {
[self setFeatureFlag:WelcomePageEnabledFeatureFlag
withBoolean:welcomePageEnabled];
@@ -105,48 +109,17 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
return n != nil ? [n boolValue] : NO;
}
#pragma mark - Private API
- (NSNumber *)getAudioOnly {
return _audioOnly;
}
- (NSNumber *)getAudioMuted {
return _audioMuted;
}
- (NSNumber *)getVideoMuted {
return _videoMuted;
}
@end
@implementation JitsiMeetConferenceOptions {
NSNumber *_audioOnly;
NSNumber *_audioMuted;
NSNumber *_videoMuted;
NSDictionary *_featureFlags;
NSDictionary *_config;
}
@dynamic audioOnly;
@dynamic audioMuted;
@dynamic videoMuted;
@dynamic welcomePageEnabled;
#pragma mark - Dynamic properties
- (BOOL)audioOnly {
return _audioOnly && [_audioOnly boolValue];
}
- (BOOL)audioMuted {
return _audioMuted && [_audioMuted boolValue];
}
- (BOOL)videoMuted {
return _videoMuted && [_videoMuted boolValue];
}
- (BOOL)welcomePageEnabled {
NSNumber *n = _featureFlags[WelcomePageEnabledFeatureFlag];
@@ -159,21 +132,15 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
if (self = [super init]) {
_serverURL = builder.serverURL;
_room = builder.room;
_subject = builder.subject;
_token = builder.token;
_colorScheme = builder.colorScheme;
_audioOnly = [builder getAudioOnly];
_audioMuted = [builder getAudioMuted];
_videoMuted = [builder getVideoMuted];
_config = builder.config;
_featureFlags = [NSDictionary dictionaryWithDictionary:builder.featureFlags];
_userInfo = builder.userInfo;
_callHandle = builder.callHandle;
_callUUID = builder.callUUID;
}
return self;
@@ -198,26 +165,6 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
props[@"colorScheme"] = self.colorScheme;
}
NSMutableDictionary *config = [[NSMutableDictionary alloc] init];
if (_audioOnly != nil) {
config[@"startAudioOnly"] = @(self.audioOnly);
}
if (_audioMuted != nil) {
config[@"startWithAudioMuted"] = @(self.audioMuted);
}
if (_videoMuted != nil) {
config[@"startWithVideoMuted"] = @(self.videoMuted);
}
if (_subject != nil) {
config[@"subject"] = self.subject;
}
if (_callHandle != nil) {
config[@"callHandle"] = self.callHandle;
}
if (_callUUID != nil) {
config[@"callUUID"] = [self.callUUID UUIDString];
}
NSMutableDictionary *urlProps = [[NSMutableDictionary alloc] init];
// The room is fully qualified.
@@ -241,7 +188,7 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
props[@"userInfo"] = [self.userInfo asDict];
}
urlProps[@"config"] = config;
urlProps[@"config"] = _config;
props[@"url"] = urlProps;
return props;

View File

@@ -63,11 +63,14 @@ RCT_EXPORT_METHOD(authorize:(RCTPromiseResolveBlock)resolve
currentReject = reject;
dispatch_async(dispatch_get_main_queue(), ^{
[DBClientsManager authorizeFromController:[UIApplication sharedApplication]
controller:[[self class] topMostController]
openURL:^(NSURL *url) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}];
DBScopeRequest *scopeRequest = [[DBScopeRequest alloc] initWithScopeType:DBScopeTypeUser
scopes:@[]
includeGrantedScopes:NO];
[DBClientsManager authorizeFromControllerV2:[UIApplication sharedApplication]
controller:[[self class] topMostController]
loadingStatusDelegate:nil
openURL:^(NSURL *url) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; }
scopeRequest:scopeRequest];
});
}
@@ -128,25 +131,31 @@ RCT_EXPORT_METHOD(getSpaceUsage: (NSString *)token
if (currentReject == nil || currentResolve == nil) {
return NO;
}
DBOAuthResult *authResult = [DBClientsManager handleRedirectURL:url];
if (authResult) {
if ([authResult isSuccess]) {
currentResolve(authResult.accessToken.accessToken);
} else {
NSString *msg;
if ([authResult isError]) {
msg = [NSString stringWithFormat:@"%@, error type: %zd",[authResult errorDescription], [authResult errorType]];
BOOL canHandle = [DBClientsManager handleRedirectURL:url completion:^(DBOAuthResult *authResult) {
if (authResult) {
if ([authResult isSuccess]) {
NSInteger msTimestamp = authResult.accessToken.tokenExpirationTimestamp * 1000;
NSDictionary *authInfo = @{@"token": authResult.accessToken.accessToken,
@"rToken": authResult.accessToken.refreshToken,
@"expireDate": @(msTimestamp)
};
currentResolve(authInfo);
} else {
msg = @"OAuth canceled!";
NSString *msg;
if ([authResult isError]) {
msg = [NSString stringWithFormat:@"%@, error type: %zd", [authResult errorDescription], [authResult errorType]];
} else {
msg = @"OAuth canceled!";
}
currentReject(@"authorize", msg, nil);
}
currentReject(@"authorize", msg, nil);
currentResolve = nil;
currentReject = nil;
}
currentResolve = nil;
currentReject = nil;
return YES;
}
return NO;
}];
return canHandle;
}
+ (UIViewController *)topMostController {

View File

@@ -144,7 +144,6 @@ public class PiPViewCoordinator {
/// screen size changes
public func resetBounds(bounds: CGRect) {
currentBounds = bounds
exitPictureInPicture()
}
/// Stop the dragging gesture of the root view

View File

@@ -586,6 +586,7 @@
},
"speaker": "Говорещ",
"speakerStats": {
"search": "Търсене",
"hours": "{{count}}ч",
"minutes": "{{count}}мин",
"name": "Име",

View File

@@ -209,7 +209,6 @@
"e2eeLabel": "Ende-zu-Ende-Verschlüsselung aktivieren",
"e2eeWarning": "WARNUNG: Nicht alle Personen dieser Konferenz scheinen Ende-zu-Ende-Verschlüsselung zu unterstützen. Wenn Sie diese aktivieren, können die entsprechenden Personen nichts mehr sehen oder hören.",
"enterDisplayName": "Bitte geben Sie hier Ihren Namen ein",
"enterDisplayNameToJoin" : "Benutzername für Konferenz eingeben" ,
"embedMeeting": "Besprechung einbetten",
"error": "Fehler",
"gracefulShutdown": "Der Dienst steht momentan wegen Wartungsarbeiten nicht zur Verfügung. Bitte versuchen Sie es später noch einmal.",
@@ -802,6 +801,7 @@
},
"speaker": "Sprecher/-in",
"speakerStats": {
"search": "Suche",
"hours": "{{count}} Std. ",
"minutes": "{{count}} Min. ",
"name": "Name",

View File

@@ -179,7 +179,7 @@
"e2eeLabel": "Ŝlosilo",
"e2eeTitle": "Tutvoja ĉifrado",
"e2eeWarning": "<br /><p><strong>ATENTIGO:</strong> Ne ĉiuj partoprenantoj en ĉi tiu kunveno ŝajnas havi subtenon de tutvoja ĉifrado. Se vi ŝaltos ĝin, ili ne povos vidi aŭ aŭdi vin.</p>",
"enterDisplayName": "Please enter your name here",
"enterDisplayName": "Enter your name here",
"error": "Eraro",
"externalInstallationMsg": "Vi devas instali nian ekranvidadan kromprogramon.",
"externalInstallationTitle": "Kromprogramo bezonata",

View File

@@ -206,6 +206,7 @@
"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.",
"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.",
"enterDisplayName": "Por favor ingresa tu nombre aquí",
"enterDisplayNameToJoin": "Por favor ingresa tu nombre para unirte",
"error": "Error",
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir pantalla.",
"externalInstallationTitle": "Extensión requerida",
@@ -952,4 +953,4 @@
"reject": "Rechazar",
"toggleLabel": "Activar sala de espera"
}
}
}

View File

@@ -203,7 +203,6 @@
"e2eeLabel": "Aktibatu puntutik punturako zifratzea",
"e2eeWarning": "OHARRA: bileraren partaide guztiek ezin dute puntutik punturako zifratzea erabili. Aukera hau aktibatzen baduzu, batzuk ezingo zaituzte ikusi eta entzun.",
"enterDisplayName": "Sartu zure izena hemen",
"enterDisplayNameToJoin": "Mesedez idatzi zure izena bileran sartzeko",
"embedMeeting": "Kapsulatu bilera",
"error": "Errorea",
"gracefulShutdown": "Zerbitzua ez dago erabilgarri mantentze-lanak direla eta. Saiatu berriro beranduago.",

View File

@@ -58,7 +58,7 @@
"today": "Aujourd'hui"
},
"chat": {
"enter": "Entrez dans le salon de chat",
"enter": "Entrez dans le salon",
"error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}",
"fieldPlaceHolder": "Tapez votre message ici",
"messagebox": "Saisissez un message",
@@ -66,15 +66,19 @@
"noMessagesMessage": "Il n'y a pas encore de messages dans cette réunion. Démarrez une conversation ici !",
"nickname": {
"popover": "Choisissez un pseudonyme",
"title": "Entrez un pseudonyme pour utiliser le chat"
"title": "Entrez un pseudonyme pour utiliser le chat et les sondages"
},
"privateNotice": "Message privé à {{recipient}}",
"title": "Chat",
"you": "vous",
"message": "Message",
"messageAccessibleTitle": "{{user}} dit: ",
"messageAccessibleTitleMe": "Je dis: ",
"smileysPanel": "Panneaux des Émojis"
"smileysPanel": "Panneaux des Émojis",
"tabs": {
"chat": "Chat",
"polls": "Sondages"
},
"title": "Chat et Sondages",
"you": "vous"
},
"chromeExtensionBanner": {
"installExtensionText": "Installer l'extension pour l'intégration de Google Calendar et Office 365",
@@ -209,7 +213,6 @@
"e2eeLabel": "Activer le chiffrement de Bout-en-Bout",
"e2eeWarning": "ATTENTION : Tous les participants de cette réunion ne semblent pas prendre en charge le chiffrement de Bout-en-Bout. Si vous activez le chiffrement, ils ne pourront ni vous voir, ni vous entendre.",
"enterDisplayName": "Merci de saisir votre nom ici",
"enterDisplayNameToJoin": "Merci de saisir votre nom pour rejoindre",
"embedMeeting": "Intégrer la réunion",
"error": "Erreur",
"gracefulShutdown": "Notre service est actuellement en maintenance. Veuillez réessayer plus tard.",
@@ -568,6 +571,34 @@
},
"passwordSetRemotely": "défini par un autre participant",
"passwordDigitsOnly": "Jusqu'à {{number}} chiffres",
"polls": {
"create": {
"addOption": "Ajouter une option",
"answerPlaceholder": "Option {{index}}",
"create": "Créer un sondage",
"cancel": "Annuler",
"pollOption" : "Option {{index}}",
"pollQuestion" : "Question du sondage",
"questionPlaceholder": "Poser une question",
"removeOption": "Supprimer l'option",
"send": "Envoyer"
},
"answer": {
"skip": "Passer",
"submit": "Envoyer"
},
"results": {
"vote": "Voter",
"changeVote": "Changer le vote",
"empty": "Il n'y a pas encore de sondages dans cette réunion. Démarrez un sondage ici !",
"hideDetailedResults": "Cacher les détails",
"showDetailedResults": "Montrer les détails"
},
"notification": {
"title": "Un nouveau sondage a été ajouté à la réunion",
"description": "Ouvrez l'onget des sondages pour voter"
}
},
"poweredby": "produit par",
"prejoin": {
"audioAndVideoError": "Erreur audio et video:",

View File

@@ -175,7 +175,7 @@
"dismiss": "Dismiss",
"displayNameRequired": "Hi! Whats your name?",
"done": "Done",
"enterDisplayName": "Please enter your name here",
"enterDisplayName": "Enter your name here",
"error": "Error",
"externalInstallationMsg": "You need to install our desktop sharing extension.",
"externalInstallationTitle": "Extension required",

View File

@@ -534,14 +534,25 @@
"oldElectronClientDescription3": "に更新してください!"
},
"participantsPane": {
"close": "閉じる",
"header": "参加者",
"headings": {
"lobby": "ロビー ({{count}})",
"participantsList": "参加者会議 ({{count}})"
"participantsList": "会議参加者 ({{count}})",
"waitingLobby": "({{count}}) ロビーで待つ"
},
"actions": {
"allow": "参加者に:",
"blockEveryoneMicCamera": "全員の音声と動画をブロックにする",
"invite": "参加者招待",
"askUnmute": "ミュートを解除するよう依頼する",
"mute": "ニューと",
"muteAll": "全員音声無効",
"stopVideo": "ビデオ停止"
"muteEveryoneElse": "他のすべての人をミュートする",
"startModeration": "ミュート解除するか、動画を開始する",
"stopEveryonesVideo": "全員の動画を無効にする",
"stopVideo": "ビデオ停止",
"unblockEveryoneMicCamera": "全員の音声と動画のブロックを解除する"
}
},
"passwordSetRemotely": "他の参加者によりセット",

File diff suppressed because it is too large Load Diff

View File

@@ -5,9 +5,10 @@
"copyInvite": "Kopiuj zaproszenie na spotkanie",
"copyLink": "Kopiuj link spotkania",
"copyStream": "Kopiuj link transmisji na żywo",
"contacts": "kontakty",
"countryNotSupported": "Nie obsługujemy jeszcze tej lokalizacji.",
"countryReminder": "Dzwonisz spoza USA? Upewnij się, że zaczynasz od kodu kraju!",
"defaultEmail": "Domyślna poczta",
"defaultEmail": "Domyślna poczta",
"disabled": "Nie możesz zapraszać ludzi.",
"failedToAdd": "Błąd dodawania uczestników",
"footerText": "Wybieranie numeru jest wyłączone.",
@@ -16,18 +17,14 @@
"inviteMoreMailSubject": "Dołącz do spotkania {{appName}}",
"inviteMorePrompt": "Zaproś innych uczestników",
"linkCopied": "Link skopiowany do schowka",
"loading": "Szukaj ludzi i numerów telefonów",
"loadingNumber": "Weryfikacja numeru telefonu",
"loadingPeople": "Wyszukiwanie osób do zaproszenia",
"noResults": "Brak pasujących wyników wyszukiwania",
"noValidNumbers": "Proszę wpisać numer telefonu",
"outlookEmail": "Poczta Outlook",
"searchNumbers": "Dodaj numery telefonów",
"searchPeople": "Szukaj ludzi",
"searchPeopleAndNumbers": "Wyszukaj osoby i dodaj ich numery telefonu",
"phoneNumbers": "numery telefonów",
"searching": "Wyszukiwanie...",
"shareInvite": "Udostępnij zaproszenie na spotkanie",
"shareLink": "Udostępnij link do spotkania, aby zaprosić innych uczestników",
"shareStream": "Udostępnij link transmisji na żywo",
"sipAddresses": "adresy SIP",
"telephone": "Telefon: {{number}}",
"title": "Zaproś uczestników na to spotkanie",
"yahooEmail": "Poczta Yahoo"
@@ -61,6 +58,7 @@
"today": "Dzisiaj"
},
"chat": {
"enter": "Wejdź do pokoju",
"error": "Błąd: Twoja wiadomość nie została wysłana. Powód: {{error}}",
"fieldPlaceHolder": "Wpisz wiadomość tutaj",
"messagebox": "Wpisz wiadomość",
@@ -71,15 +69,24 @@
"title": "Wpisz swoją nazwę, aby użyć rozmowy"
},
"privateNotice": "Prywatna wiadomość do {{recipient}}",
"message": "Wiadomość",
"messageAccessibleTitle": "{{user}} mówi:",
"messageAccessibleTitleMe": "mówię:",
"smileysPanel": "Panel emoji",
"tabs": {
"chat": "Chat",
"polls": "Ankiety"
},
"title": "Rozmowa",
"you": "Ty"
},
"chromeExtensionBanner": {
"chromeExtensionBanner": {
"installExtensionText": "Zainstaluj rozszerzenie integrujące Kalendarz Google i Office 365",
"buttonText": "Zainstaluj rozszerzenie Chrome",
"dontShowAgain": "Nie pokazuj ponownie"
"dontShowAgain": "Nie pokazuj ponownie",
"close": "Zamknij"
},
"connectingOverlay": {
"connectingOverlay": {
"joiningRoom": "Łączenie ze spotkaniem…"
},
"connection": {
@@ -99,9 +106,11 @@
},
"connectionindicator": {
"address": "Adres:",
"audio_ssrc": "Audio SSRC:",
"bandwidth": "Szacowana przepustowość:",
"bitrate": "Szybkość transmisji:",
"bridgeCount": "Liczba serwerów: ",
"codecs": "Kodeki (A/V): ",
"connectedTo": "Podłączone do:",
"e2e_rtt": "E2E RTT:",
"framerate": "Klatek na sekundę:",
@@ -125,9 +134,12 @@
"remoteport": "Port zdalny:",
"remoteport_plural": "Porty zdalne:",
"resolution": "Rozdzielczość:",
"savelogs": "Zapisz logi",
"participant_id": "ID uczestnika:",
"status": "Połączenie:",
"transport": "Transport:",
"transport_plural": "Transporty:"
"transport_plural": "Transporty:",
"video_ssrc": "Video SSRC:"
},
"dateUtils": {
"earlier": "Wcześniej",
@@ -169,12 +181,14 @@
"alreadySharedVideoMsg": "Inny użytkownik już prezentuje wideo. Ta konferencja pozwala tylko na prezentację jednego wideo w tym samym czasie.",
"alreadySharedVideoTitle": "Tylko jedna prezentacja wideo jest dozwolona w tym samym czasie",
"applicationWindow": "Okno aplikacji",
"authenticationRequired": "Wymagane uwierzytelnienie",
"Back": "Wstecz",
"cameraConstraintFailedError": "Twoja kamera nie spełnia niektórych obowiązkowych wymagań.",
"cameraNotFoundError": "Kamera nie znaleziona.",
"cameraNotSendingData": "Nie możemy połączyć się z Twoją kamerą. Sprawdź, czy inna aplikacja nie używa tego urządzenia, wybierz inne urządzenie z menu ustawień lub spróbuj zrestartować aplikację.",
"cameraNotSendingDataTitle": "Brak dostępu do kamery",
"cameraPermissionDeniedError": "Nie udzieliłeś pozwolenia na użycie swojej kamery. Nadal możesz dołączyć do konferencji, ale inni nie będą Cię widzieć. Naciśnij przycisk kamery na pasku adresu, aby to poprawić.",
"cameraTimeoutError": "Nie udało się uruchomić źródła obrazu. Przekroczono limit czasu",
"cameraUnknownError": "Z nieznanej przyczyny nie można użyć kamery.",
"cameraUnsupportedResolutionError": "Twoja kamera nie obsługuje wymaganej rozdzielczości.",
"Cancel": "Anuluj",
@@ -197,15 +211,14 @@
"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 zadziałą tylko dla uczestników korzystających z przeglądarek wspierających wstawiane strumienie.",
"e2eeLabel": "Klucz E2EE",
"e2eeNoKey": "brak",
"e2eeToggleSet": "Ustaw klucz",
"e2eeSet": "Ustaw",
"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.",
"enterDisplayName": "Wpisz tutaj swoje imię",
"embedMeeting": "Osadź spotkanie",
"error": "Błąd",
"gracefulShutdown": "Usługa aktualnie jest niedostępna. Prosze spróbować później.",
"grantModeratorDialog": "Czy na pewno chcesz przyznać temu uczestnikowi prawa moderatora?",
"grantModeratorTitle": "Przyznaj prawa moderatora",
"hideShareAudioHelper": "Nie pokazuj więcej",
"IamHost": "Jestem gospodarzem",
"incorrectRoomLockPassword": "Hasło nieprawidłowe",
"incorrectPassword": "Niepoprawna nazwa użytkownika lub hasło",
@@ -218,12 +231,12 @@
"kickTitle": "Ups! {{participantDisplayName}} usunął Cię z tego spotkania",
"liveStreaming": "Strumień na żywo",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Nie możliwe podczas aktywnego nagrywania",
"liveStreamingDisabledForGuestTooltip": "Goście nie mogą używać transmisji na żywo.",
"liveStreamingDisabledTooltip": "Rozpoczęcie transmisji na żywo jest wyłączone.",
"lockMessage": "Zabezpieczenie konferencji nie powiodło się.",
"lockRoom": "Dodaj spotkanie $t(lockRoomPasswordUppercase)",
"lockTitle": "Nie powiodło się zabezpieczenie konferencji",
"logoutQuestion": "Na pewno chcesz się wylogować i zakończyć konferencję?",
"login": "Zaloguj",
"logoutTitle": "Wyloguj",
"maxUsersLimitReached": "Osiągnięto limit maksymalnej liczby uczestników. Konferencja jest zapełniona. Skontaktuj się z właścicielem spotkania lub spróbuj ponownie później!",
"maxUsersLimitReachedTitle": "Osiągnięto maksymalną liczbę uczestników",
@@ -232,29 +245,43 @@
"micNotSendingData": "Wejdź w ustawienia komputera, aby wyłączyć wyciszenie i dostosować poziom głośności",
"micNotSendingDataTitle": "Twój mikrofon jest wyciszony przez ustawienia systemowe",
"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.",
"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.",
"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.",
"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": "Wyciszenie",
"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?",
"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.",
"noDropboxToken": "Brak poprawnego tokenu Dropbox",
"Ok": "OK",
"passwordLabel": "$t(lockRoomPasswordUppercase)",
"password": "$t(lockRoomPasswordUppercase)",
"passwordLabel": "Spotkanie zostało zabezpieczone przez innego uczestnika. Wprowadź $t(lockRoomPassword), aby dołączyć.",
"passwordNotSupported": "Ustanowienie spotkania $t(lockRoomPassword) nie jest obsługiwane.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) nie jest obsługiwane",
"passwordRequired": "$t(lockRoomPasswordUppercase) jest wymagane",
"permissionErrorTitle": "Wymagana autoryzacja",
"permissionCameraRequiredError": "Dostęp do kamery jest wymagany do udziału w konferencjach z obrazem. Udziel dostępu do kamery w ustawieniach",
"permissionMicRequiredError": "Dostęp do mikrofonu jest wymagany do udziału w konferencjach z dźwiękiem. Udziel dostępu do mikrofonu w ustawieniach",
"popupError": "Twoja przeglądarka blokuje wyskakujące okienka pochodzące z tej witryny. Włącz wyświetlanie wyskakujących okienek w ustawieniach bezpieczeństwa Twojej przeglądarki i spróbuj ponownie.",
"popupErrorTitle": "Wyskakujące okienko zostało zablokowane",
"readMore": "więcej",
"recording": "Nagrywanie",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Nie możliwe podczas aktywnej transmisji na żywo",
"recordingDisabledForGuestTooltip": "Goście nie mogą uruchamiać nagrywania.",
"recordingDisabledTooltip": "Start recording disabled.",
"recordingDisabledTooltip": "Nagrywanie wyłączone.",
"rejoinNow": "Połącz ponownie teraz",
"remoteControlAllowedMessage": "{{user}} zaakceptował Twoją prośbę o kontrolę zdalną!",
"remoteControlDeniedMessage": "{{user}} odrzucił Twoją prośbę o kontrolę zdalną!",
@@ -280,15 +307,26 @@
"sendPrivateMessageTitle": "Wysłać prywatnie?",
"serviceUnavailable": "Usługa jest niedostępna",
"sessTerminated": "Połączenie przerwane",
"sessionRestarted": "Konferencja została wznowiona",
"Share": "Udostępnij",
"shareAudio": "Kontynuuj",
"shareAudioTitle": "Jak można udostępnić dźwięk?",
"shareAudioWarningTitle": "Aby udostępniać dźwięk, musisz wyłączyć udostępnianie ekranu",
"shareAudioWarningH1": "Jeśli chcesz udostępniać wyłącznie dźwięk:",
"shareAudioWarningD1": "musisz wyłączyć udostępnianie ekranu, zanim będziesz mógł udostępniać dźwięk.",
"shareAudioWarningD2": "musisz ponownie uruchomić udostępnianie ekranu i wybrać opcję \"udostępnij dźwiękś\".",
"shareMediaWarningGenericH2": "Jeżeli chcesz udostępniać ekran i dźwięk",
"shareVideoLinkError": "Podaj proszę prawidłowy link youtube.",
"shareVideoTitle": "Udostępnij wideo",
"shareYourScreen": "Włącz udostępnianie ekranu",
"shareYourScreenDisabled": "Udostępnianie ekranu wyłączone.",
"shareYourScreenDisabledForGuest": "Goście nie mogą współdzielić ekranu.",
"startLiveStreaming": "Rozpocznij transmisję na żywo",
"startRecording": "Rozpocznij nagrywanie",
"startRemoteControlErrorMessage": "Wystąpił błąd podczas próby rozpoczęcie sesji zdalnej kontroli!",
"shareScreenWarningTitle": "Aby udostępnić ekran, musisz zatrzymać udostępnianie dźwięku",
"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\".",
"stopLiveStreaming": "Zatrzymaj transmisję na żywo",
"stopRecording": "Zatrzymaj nagrywanie",
"stopRecordingWarning": "Naprawdę chcesz zatrzymać nagrywanie?",
@@ -301,12 +339,20 @@
"tokenAuthFailedTitle": "Uwierzytelnianie nie powiodło się",
"transcribing": "Transkrypcja",
"unlockRoom": "Usuń spotkanie $t(lockRoomPassword)",
"user": "Użytkownik",
"userIdentifier": "Nazwa użytkownika",
"userPassword": "hasło użytkownika",
"videoLink": "Link do video",
"viewUpgradeOptions": "Pokaż opcje aktualizacji",
"viewUpgradeOptionsContent": "Musisz uaktualnić swój plan, aby korzystać z funkcji premium, takich jak nagrywanie, transkrypcja, przesyłanie strumieniowe RTMP i nie tylko.",
"viewUpgradeOptionsTitle": "Odkryłeś funkcję premium!",
"WaitForHostMsg": "Spotkanie <b>{{room}}</b> jeszcze się nie rozpoczęło. Jeśli jesteś gospodarzem, prosimy o uwierzytelnienie. Jeśli nie, prosimy czekać na przybycie gospodarza.",
"WaitForHostMsgWOk": "Spotkanie <b>{{room}}</b> jeszcze się nie rozoczęło. Jeśli jesteś jej gospodarzem, wybierz Ok, aby się uwierzytelnić. Jeśli nie, prosimy czekać na przybycie gospodarza.",
"WaitingForHost": "Oczekiwanie na gospodarza",
"WaitingForHostTitle": "Oczekiwanie na gospodarza...",
"Yes": "Tak",
"yourEntireScreen": "Cały Twój ekran"
"yourEntireScreen": "Cały Twój ekran",
"remoteUserControls": "Zdalna kontrola użytkownika {{username}}",
"localUserControls": "Lokalna kontrola użytkownika"
},
"dialOut": {
"statusMessage": "jest teraz {{status}}"
@@ -320,6 +366,28 @@
"embedMeeting": {
"title": "Osadź to spotkanie"
},
"virtualBackground": {
"apply": "Zastosuj",
"title": "Tła",
"blur": "Rozmycie",
"slightBlur": "Lekkie rozmycie",
"removeBackground": "Usuń tło",
"addBackground": "Dodaj tło",
"pleaseWait": "Proszę czekać...",
"none": "Żadne",
"uploadedImage": "Przesłany obraz {{index}}",
"deleteImage": "Usuń obraz",
"image1": "Plaża",
"image2": "Biała ściana",
"image3": "Biały pusty pokój",
"image4": "Czarna lampa",
"image5": "Góra",
"image6": "Las",
"image7": "Wschód słońca",
"desktopShareError": "Nie można udostępnić pulpitu",
"desktopShare": "Udostępnianie pulpitu",
"webAssemblyWarning": "WebAssembly nie jest obsługiwany"
},
"feedback": {
"average": "Średnio",
"bad": "Źle",
@@ -327,7 +395,8 @@
"good": "Dobrze",
"rateExperience": "Jak oceniasz tę konferencję?",
"veryBad": "Bardzo źle",
"veryGood": "Bardzo dobrze"
"veryGood": "Bardzo dobrze",
"star": "Gwiazda"
},
"incomingCall": {
"answer": "Odbierz",
@@ -344,6 +413,7 @@
"country": "Kraj",
"dialANumber": "Aby dołączyć do spotkania, wprowadź jeden z tych numerów i podaj pin.",
"dialInConferenceID": "PIN:",
"copyNumber": "Skopiuj numer",
"dialInNotSupported": "Przepraszamy, aktualnie wybieranie nie jest obsługiwane.",
"dialInNumber": "Wdzwoń się:",
"dialInSummaryError": "Błąd podczas przetwarzania danych do wdzwonienia. Spróbuj ponownie później.",
@@ -352,6 +422,11 @@
"inviteLiveStream": "Aby obejrzeć transmisję na żywo z tego spotkania, kliknij ten odnośnik: {{url}}",
"invitePhone": "Aby skorzystać z połączenia telefonicznego, wprowadź: {{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "Poszukujesz innego numeru do wdzwonienia?\nZobacz listę numerów: {{url}}\n\n\nJeśli wdzwaniasz się z telefonu pokojowego, połącz się bez dźwięku: {{silentUrl}}",
"inviteSipEndpoint": "Aby dołączyć używając SIP użyj tego adresu: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} zaprasza Cię do spotkania.",
"inviteTextiOSJoinSilent": "Jeżeli wdzwaniasz się za pomocą telefonu konferencyjnego użyj tego linku, aby dołączyć bez dźwięku: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "Kliknij w link, aby dołączyć: {{inviteUrl}}.",
"inviteTextiOSPhone": "Aby dołączyć z telefonu użyj numeru: {{number}},,{{conferenceID}}#. Pełna lista numerów telefonów: {{didUrl}}.",
"inviteURLFirstPartGeneral": "Zostałeś zaproszony do dołączenia do spotkania.",
"inviteURLFirstPartPersonal": "{{name}} zaprasza Cię na spotkanie.\n",
"inviteURLSecondPart": "\nDołącz do spotkania:\n{{url}}\n",
@@ -362,6 +437,7 @@
"noRoom": "Nie podano pokoju do wdzwonienia.",
"numbers": "Numery do wdzwonienia",
"password": "$t(lockRoomPasswordUppercase):",
"sip": "Adres SIP",
"title": "Udostępnij",
"tooltip": "Udostępnij odnośnik i informacje do wdzwonienia się na to spotkanie",
"label": "Poinformuj o spotkaniu"
@@ -380,6 +456,7 @@
"support": "Wsparcie",
"supportMsg": "Jeśli to się powtarza, skontaktuj się z nami przez"
},
"jitsiHome": "{{logo}} Logo, link do strony głównej",
"keyboardShortcuts": {
"focusLocal": "Powiększ wideo",
"focusRemote": "Skup na obrazie innej osoby",
@@ -392,10 +469,10 @@
"showSpeakerStats": "Pokaż statystyki mówcy",
"toggleChat": "Otwórz lub zamknij czat",
"toggleFilmstrip": "Wyświetl lub ukryj miniaturki video",
"toggleParticipantsPane": "Pokaż lub ukryj listę uczestników",
"toggleScreensharing": "Przełącz pomiędzy kamerą i wspóldzieleniem ekranu",
"toggleShortcuts": "Wyświetl lub ukryj skróty klawiaturowe",
"videoMute": "Uruchom lub zatrzymaj kamerę",
"videoQuality": "Zarządzanie jakością połączeń"
"videoMute": "Uruchom lub zatrzymaj kamerę"
},
"liveStreaming": {
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje strumieniowanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
@@ -428,7 +505,7 @@
"start": "Rozpocznij transmisję na żywo",
"streamIdHelp": "Co to jest?",
"unavailableTitle": "Transmisja na żywo jest niedostępna",
"youtubeTerms": "Warunki użytkowania YouTube",
"youtubeTerms": "Warunki użytkowania YouTube",
"googlePrivacyPolicy": "Polityka prywatności Google"
},
"localRecording": {
@@ -471,6 +548,7 @@
"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",
@@ -481,9 +559,13 @@
"mutedTitle": "Jesteś wyciszony!",
"mutedRemotelyTitle": "Zostałeś wyciszony przez {{participantDisplayName}}!",
"mutedRemotelyDescription": "Zawsze możesz wyłączyć wyciszenie, gdy będziesz gotowy do mówienia. Wycisz, gdy skończysz, aby nie hałasować podczas spotkania.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) usunięty przez innego uczestnika",
"videoMutedRemotelyTitle": "Twoja kamera została wyłączona przez {{participantDisplayName}}!",
"videoMutedRemotelyDescription": "Możesz ją włączyć ponownie w dowolnym momencie.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) usunięte przez innego uczestnika",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) ustawiony przez innego uczestnika",
"raisedHand": "{{name}} chce mówić.",
"screenShareNoAudio": "Opcja \"Udostępnij dźwięk\" nie została zaznaczona podczas wyboru okna.",
"screenShareNoAudioTitle": "Nie można udostępnić dźwięku",
"somebody": "Ktoś",
"startSilentTitle": "Dołączyłeś bez wyjścia dźwiękowego!",
"startSilentDescription": "Ponownie dołącz do spotkania, aby włączyć dźwięk",
@@ -496,13 +578,78 @@
"OldElectronAPPTitle": "Luka bezpieczeństwa!",
"oldElectronClientDescription1": "Najprawdopodobniej używasz starej wersji klienta Jitsi Meet, który jest podatny na luki bezpieczeństwa. Proszę zaktualizować do ",
"oldElectronClientDescription2": "najnowszej wersji",
"oldElectronClientDescription3": " teraz!"
"oldElectronClientDescription3": " teraz!",
"moderationInEffectDescription": "Podnieś rękę, jeżeli chcesz mówić",
"moderationInEffectCSDescription": "Podnieś rękę, aby udostępniać obraz",
"moderationInEffectVideoDescription": "Podnieś rękę, aby włączyć kamerę",
"moderationInEffectTitle": "Mikrofon jest wyciszony przez moderatora",
"moderationInEffectCSTitle": "Udostępnianie jest wyłaczone przez moderatora",
"moderationInEffectVideoTitle": "Kamera jest wyłączona przez moderatora",
"moderationRequestFromModerator": "Moderator prosi Cię o włączenie mikrofonu",
"moderationRequestFromParticipant": "chce mówić",
"moderationStartedTitle": "Rozpoczęto moderację",
"moderationStoppedTitle": "Moderacja zatrzymana",
"moderationToggleDescription": "przez {{participantDisplayName}}",
"raiseHandAction": "Podnieś rękę",
"reactionSounds": "Wyłącz dźwięki",
"groupTitle": "Powiadomienia"
},
"participantsPane": {
"close": "Zamknij",
"header": "Uczestnicy",
"headings": {
"lobby": "Lobby ({{count}})",
"participantsList": "Obecnych ({{count}})",
"waitingLobby": "Oczekujących ({{count}})"
},
"actions": {
"allow": "Zezwól uczestnikom na:",
"blockEveryoneMicCamera": "Zablokuj wszystkim kamerę i mikrofon",
"invite": "Zaproś",
"askUnmute": "Poproś o wyłączenie wyciszenia",
"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"
}
},
"passwordSetRemotely": "wybrane przez innego uczestnika",
"passwordDigitsOnly": "Do {{number}} cyfr",
"polls": {
"create": {
"addOption": "Dodaj opcję",
"answerPlaceholder": "Opcja {{index}}",
"create": "Stwórz ankietę",
"cancel": "Anuluj",
"pollOption": "Opcja {{index}}",
"pollQuestion": "Pytanie",
"questionPlaceholder": "Zadaj pytanie",
"removeOption": "Usuń opcję",
"send": "Wyślij"
},
"answer": {
"skip": "Pomiń",
"submit": "Wyślij"
},
"results": {
"vote": "Głosuj",
"changeVote": "Zmień głos",
"empty": "Nie ma aktywnych ankiet. Rozpocznij ankietę tutaj!",
"hideDetailedResults": "Ukryj szczegóły",
"showDetailedResults": "Pokaż szczegóły"
},
"notification": {
"title": "Utworzono nową ankietę do tego spotkania",
"description": "Otwórz kartę ankiet, aby zagłosować"
}
},
"poweredby": "napędzane dzięki",
"prejoin": {
"audioAndVideoError": "Błąd audio i wideo:",
"audioDeviceProblem": "Wystąpił problem z urządzeniem audio.",
"audioOnlyError": "Błąd audio:",
"audioTrackError": "Nie można utworzyć ścieżki audio.",
"calling": "Wybieranie",
@@ -510,6 +657,25 @@
"callMeAtNumber": "Zadzwoń do mnie pod ten numer:",
"configuringDevices": "Konfigurowanie urządzeń...",
"connectedWithAudioQ": "Jesteś połączony głosowo?",
"connection": {
"good": "Twoje połączenie internetowe wygląda dobrze!",
"nonOptimal": "Twoje połączenie internetowe nie jest optymalne.",
"poor": "Masz złe połączenie internetowe."
},
"connectionDetails": {
"audioClipping": "Twój dźwięk będzie się przycinał.",
"audioHighQuality": "Twój dźwięk będzie miał doskonałą jakość.",
"audioLowNoVideo": "Twój dźwięk prawdopodobnie będzie zły i nie będzie wideo.",
"goodQuality": "Świetnie! Jakość obrazu i dźwięku powinna być bardzo dobra.",
"noMediaConnectivity": "Nie można nawiązać połączenia z mediami. Jest to zwykle wywoływane przez zaporę sieciową lub NAT.",
"noVideo": "Twój obraz będzie słabej jakości.",
"undetectable": "Jeśli podczas spotkania nadal będziesz mieć problemy z przeglądarką, sprawdź połączenie oraz działanie głośników, mikrofonu i kamery. Upewnij się również, że Twoja przeglądarka ma niezbędne uprawnienia dostępu do mikrofonu i kamery oraz że masz zainstalowaną najnowszą wersję przeglądarki. Jeśli nadal masz problemy, skontaktuj się z obsługą aplikacji.",
"veryPoorConnection": "Twoja jakość konferencji będzie prawdopodobnie bardzo słaba.",
"videoFreezing": "Twój obraz będzie się przycinał, stanie się czarny i będzie miał niską rozdzielczość.",
"videoHighQuality": "Twój obraz będzie dobrej jakości.",
"videoLowQuality": "Twój obraz będzie miał niską rozdzielczość oraz liczbę klatek na sekundę.",
"videoTearing": "Twój obraz będzie miał niską rozdzielczość, a na ekranie pojawią się nieporządane artefakty."
},
"copyAndShare": "Kopiuj i udostępnij link spotkania",
"dialInMeeting": "Wdzwoń się na spotkanie",
"dialInPin": "Wdzwoń się na spotkanie i wprowadź kod PIN:",
@@ -519,6 +685,7 @@
"errorDialOutDisconnected": "Nie udało się wybrać numeru. Rozłączono",
"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",
"errorStatusCode": "Błąd wybierania, kod statusu: {{status}}",
"errorValidation": "Weryfikacja numeru zakończona niepowodzeniem",
"iWantToDialIn": "Chcę się wdzwonić",
@@ -531,6 +698,7 @@
"or": "lub",
"premeeting": "Przed spotkaniem",
"showScreen": "Włącz ekran Przed spotkaniem",
"keyboardShortcuts": "Włącz skróty klawiszowe",
"startWithPhone": "Uruchom przez telefon",
"screenSharingError": "Błąd udostępniania ekranu:",
"videoOnlyError": "Błąd wideo:",
@@ -539,25 +707,26 @@
},
"presenceStatus": {
"busy": "Zajęte",
"calling": "Dzwonienie…",
"calling": "Dzwonię...",
"connected": "Połączono",
"connecting": "Łączenie…",
"connecting2": "Łączenie*...",
"connecting": "Łączę...",
"connecting2": "Łączę*...",
"disconnected": "Rozłączony",
"expired": "Wygasłe",
"expired": "Wygasły",
"ignored": "Zignorowane",
"initializingCall": "Inicjalizacja połączenia",
"initializingCall": "Inicjalizacja połączenia...",
"invited": "Zaproszony",
"rejected": "Odrzucony",
"ringing": "Dzwonek"
"ringing": "Dzwonek..."
},
"profile": {
"avatar": "awatar",
"setDisplayNameLabel": "Podaj swoją wyświetlaną nazwę",
"setEmailInput": "Wprowadź adres e-mail",
"setEmailLabel": "Ustaw adres poczty elektronicznej swojego Gravatara",
"title": "Profil"
},
"raisedHand": "Chcesz się odezwać ?",
"raisedHand": "Chcę coś powiedzieć",
"recording": {
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <3>{{app}}</3>.",
@@ -566,12 +735,15 @@
"beta": "BETA",
"busy": "Pracujemy nad uwolnieniem zasobów nagrywania. Proszę spróbować ponownie za kilka minut.",
"busyTitle": "Wszystkie urządzenia nagrywania są obecnie zajete",
"copyLink": "Skopiuj link",
"error": "Nagranie się nie powiodło. Proszę spróbować ponownie.",
"errorFetchingLink": "Nie udało się wczytać linku do nagrania.",
"expandedOff": "Nagrywanie zostało zatrzymane",
"expandedOn": "Spotkanie jest obecnie nagrywane.",
"expandedPending": "Nagrywanie się rozpoczyna…",
"failedToStart": "Nagrywanie nie jest możliwe",
"fileSharingdescription": "Udostępnij nagranie uczestnikom spotkania",
"linkGenerated": "Wygenerowano link do nagrania.",
"live": "NA ŻYWO",
"loggedIn": "Zalogowano jako {{userName}}",
"off": "Nagrywanie zatrzymane",
@@ -581,11 +753,13 @@
"pending": "Przygotowanie do nagrania spotkania…",
"rec": "NAGRYWANIE",
"serviceDescription": "Twoje nagranie zostanie zapisane przez usługę nagrywania",
"serviceDescriptionCloud": "Nagrywanie w chmurze",
"serviceName": "Usługa nagrywania",
"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.",
"unavailableTitle": "Nagrywanie niedostępne"
"unavailableTitle": "Nagrywanie niedostępne",
"uploadToCloud": "Prześlij do chmury"
},
"sectionList": {
"pullToRefresh": "Przeciągnij, aby odświeżyć"
@@ -604,27 +778,39 @@
"signedIn": "Dostęp do wydarzeń kalendarza dla {{email}}. Kliknij poniższy przycisk Rozłącz aby zatrzymać dostęp do wydarzeń kalendarza.",
"title": "Kalendarz"
},
"desktopShareFramerate": "Liczba klatek na sekundę dla udostępniania ekranu",
"desktopShareWarning": "Wymagane ponowne włączenie udostępniania ekranu, aby zastosować nowe ustawienia.",
"desktopShareHighFpsWarning": "Wyższa liczba klatek może wpłynąć na szybkość transmisji danych. Aby ustawienie zaczęło obowiązywać, musisz ponownie uruchomić udostępnianie ekranu.",
"devices": "Urządzenia",
"followMe": "Wszyscy widzą mnie",
"framesPerSecond": "klatek na sekundę",
"incomingMessage": "Przychodząca wiadomość",
"language": "Język",
"loggedIn": "Zalogowano jako {{name}}",
"microphones": "Mikrofony",
"sounds": "Dźwięki",
"moderator": "Moderacja",
"more": "Więcej",
"name": "Nazwa",
"noDevice": "Brak",
"participantJoined": "Dołączył nowy uczestnik",
"participantLeft": "Uczestnik opuścił spotkanie",
"playSounds": "Włącz dźwięki",
"reactions": "Reakcje",
"sameAsSystem": "Jak system ({{label}})",
"selectAudioOutput": "Wyjście audio",
"selectCamera": "Kamera",
"selectMic": "Mikrofon",
"speakers": "Głośniki",
"speakers": "Głośniki",
"startAudioMuted": "Wycisz wszystkich dołączających",
"startVideoMuted": "Ukryj wszystkich dołączających",
"talkWhileMuted": "Jesteś wyciszony",
"title": "Ustawienia"
},
"settingsView": {
"advanced": "Zaawansowane",
"alertOk": "OK",
"alertCancel": "Anuluj",
"alertCancel": "Anuluj",
"alertTitle": "Uwaga",
"alertURLText": "Wprowadzony adres URL serwera jest nieprawidłowy",
"buildInfoSection": "Informacja o kompilacji",
@@ -649,6 +835,7 @@
},
"speaker": "Mówca",
"speakerStats": {
"search": "Wyszukaj",
"hours": "{{count}} godz.",
"minutes": "{{count}} min.",
"name": "Nazwa",
@@ -658,7 +845,8 @@
},
"startupoverlay": {
"policyText": " ",
"title": "{{app}} potrzebuje używać Twój mikrofon i kamerę."
"genericTitle": "Spotkanie potrzebuje używać Twojego mikrofonu i kiamery.",
"title": "{{app}} potrzebuje używać Twojego mikrofonu i kiamery."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Dołącz ponownie",
@@ -669,13 +857,14 @@
"accessibilityLabel": {
"audioOnly": "Przełączanie tylko audio",
"audioRoute": "Wybierz urządzenie dźwiękowe",
"boo": "Buczenie",
"callQuality": "Zarządzanie jakością obrazu",
"cc": "Przełączanie napisów",
"chat": "Przełączanie okna rozmowy",
"clap": "Klaskanie",
"document": "Przełączanie wspólnego dokumentu",
"download": "Pobierz nasze aplikacje",
"embedMeeting": "Osadź spotkanie",
"e2ee": "Szyfrowanie End-to-End",
"feedback": "Zostaw swoją opinię",
"fullScreen": "Przełączanie trybu pełnoekranowego",
"grantModerator": "Przyznaj prawa moderowania",
@@ -683,6 +872,8 @@
"help": "Pomoc",
"invite": "Zaproś uczestników",
"kick": "Usuń uczestnika",
"laugh": "Śmiech",
"like": "Kciuk w górę",
"lobbyButton": "Włącz/wyłącz tryb lobby",
"localRecording": "Przełączanie lokalnych urządzeń sterujących zapisem danych",
"lockRoom": "Przełączenie hasła spotkania",
@@ -691,34 +882,52 @@
"moreOptions": "Pokaż więcej opcji",
"mute": "Uruchamianie wyciszonego audycji",
"muteEveryone": "Wycisz wszystkich",
"muteEveryoneElse": "Wycisz pozostałych",
"muteEveryonesVideo": "Wyłącz wszystkim kamery",
"muteEveryoneElsesVideo": "Wyłącz kamery pozostałym",
"participants": "Uczestnicy",
"pip": "Tryb przełączania obrazu-w-obrazie",
"privateMessage": "Wyślij wiadomość prywatną",
"profile": "Edytuj swój profil",
"raiseHand": "Przełączyć rękę w górę",
"reactionsMenu": "Otwórz / Zamknij reakcje",
"recording": "Przełączanie nagrywania",
"remoteMute": "Wycisz uczestnika",
"remoteVideoMute": "Wyłącz kamerę uczestnika",
"security": "Opcje zabezpieczeń",
"Settings": "Ustawienia przełączania",
"shareaudio": "Udostępnij audio",
"sharedvideo": "Przełącz udostępnianie obrazu na YouTube",
"shareRoom": "Zaproś kogoś",
"shareYourScreen": "Przełączanie podziału ekranu",
"shortcuts": "Przełączanie skrótów klawiszowych",
"show": "Pokaż na scenie",
"silence": "Cisza",
"speakerStats": "Przełączanie statystyk dotyczących mówców",
"surprised": "Zaskoczony",
"tileView": "Przełącz widok kafelkowy",
"toggleCamera": "Przełączanie kamery",
"toggleFilmstrip": "Przełącz filmstrip",
"videomute": "Przełączanie wyciszonego filmu wideo",
"videoblur": "Przełącz rozmazanie obrazu"
"videoblur": "Przełącz rozmazanie obrazu",
"selectBackground": "Wybierz tło",
"expand": "Rozwiń",
"collapse": "Zwiń"
},
"addPeople": "Dodaj ludzi do swojej rozmowy",
"audioSettings": "Ustawienia audio",
"videoSettings": "Ustawienia video",
"audioOnlyOff": "Wyłącz tryb słabego łącza",
"audioOnlyOn": "Włącz tryb słabego łącza",
"audioRoute": "Wybierz urządzenie dźwiękowe",
"authenticate": "Uwierzytelnianie",
"boo": "Buczenie",
"callQuality": "Zarządzanie jakością obrazu",
"chat": "Otwórz / Zamknij okno czatu",
"clap": "Klaskanie",
"closeChat": "Zamknij czat",
"closeReactionsMenu": "Zamknij reakcje",
"disableReactionSounds": "Wyłącz dźwięki reakcji dla tego spotkania",
"documentClose": "Zamknij udostępniony dokument",
"documentOpen": "Otwarty udostępniony dokument",
"download": "Pobierz nasze aplikacje",
@@ -732,6 +941,8 @@
"hangup": "Opuść spotkanie",
"help": "Pomoc",
"invite": "Zaproś uczestników",
"laugh": "Śmiech",
"like": "Kciuk w górę",
"lobbyButtonDisable": "Wyłącz tryb lobby",
"lobbyButtonEnable": "Włącz tryb lobby",
"login": "Zaloguj",
@@ -741,6 +952,7 @@
"moreOptions": "Więcej opcji",
"mute": "Włącz / Wyłącz mikrofon",
"muteEveryone": "Wycisz wszystkich",
"muteEveryonesVideo": "Wyłącz wszystkim kamery",
"noAudioSignalTitle": "Brak sygnału audio!",
"noAudioSignalDesc": "Jeżeli celowo nie wyciszyłeś mikrofonu w ustawieniach systemowych spróbuj innego urządzenia.",
"noAudioSignalDescSuggestion": "Jeżeli celowo nie wyciszyłeś mikrofonu w ustawieniach systemowych spróbuj sugerowanego urządzenia.",
@@ -749,28 +961,39 @@
"noisyAudioInputTitle": "Twój mikrofon powoduje zakłócenia!",
"noisyAudioInputDesc": "Wygląda na to, że Twój mikrofon powoduje zakłócenia.",
"openChat": "Otwórz czat",
"openReactionsMenu": "Otwórz reakcje",
"participants": "Uczestnicy",
"pip": "Wprowadź tryb obrazu w obrazie",
"privateMessage": "Wyślij wiadomość prywatną",
"profile": "Edytuj swój profil",
"raiseHand": "Podnieś / Opuść rękę",
"raiseYourHand": "Podnieś rękę",
"reactionBoo": "Wyślij buczenie",
"reactionClap": "Wyślij klaskanie",
"reactionLaugh": "Wyślij śmiech",
"reactionLike": "Wyślij kciuk w górę",
"reactionSilence": "Wyślij cisza",
"reactionSurprised": "Wyślij zaskoczony",
"security": "Opcje zabezpieczeń",
"Settings": "Ustawienia",
"shareaudio": "Udostępnij audio",
"sharedvideo": "Udostępnij wideo z Youtube",
"shareRoom": "Zaproś kogoś",
"shortcuts": "Wyświetl skróty",
"silence": "Cisza",
"speakerStats": "Statystyki mówców",
"startScreenSharing": "Zacznij współdzielenie ekranu",
"startSubtitles": "Uruchom napisy",
"stopScreenSharing": "Zatrzymaj współdzielenie ekranu",
"stopAudioSharing": "Zakończ udostępnianie audio",
"stopScreenSharing": "Zakończ współdzielenie ekranu",
"stopSubtitles": "Zatrzymaj napisy",
"stopSharedVideo": "Zatrzymaj wideo z YouTube",
"surprised": "Zaskoczony",
"talkWhileMutedPopup": "Próbujesz mówić? Jesteś wyciszony.",
"tileViewToggle": "Przełączanie kafelkowego widoku",
"toggleCamera": "Przełączanie kamery",
"videomute": "Włącz / Wyłącz kamerę",
"startvideoblur": "Rozmaż moje tło",
"stopvideoblur": "Wyłącz rozmazanie tła"
"selectBackground": "Wybierz tło"
},
"transcribing": {
"ccButtonTooltip": "Uruchom / Zatrzymaj napisy",
@@ -796,6 +1019,7 @@
"react-nativeGrantPermissions": "Wybierz <b><i>Pozwól</i></b>, gdy przeglądarka zapyta o pozwolenie.",
"safariGrantPermissions": "Wybierz <b><i>OK</i></b>, gdy przegladarka zapyta o pozwolenie."
},
"volumeSlider": "Kontrola głośności",
"videoSIPGW": {
"busy": "Pracujemy nad uwolnieniem zasobów. Prosimy spróbować za kilka minut.",
"busyTitle": "Usługa pokoju jest obecnie zajęta",
@@ -818,15 +1042,16 @@
"ld": "LD",
"ldTooltip": "Podgląd obrazu w niskiej rozdzielczości",
"lowDefinition": "Niska rozdzielczość",
"onlyAudioAvailable": "Dostępny jest tylko dźwięk",
"onlyAudioSupported": "Obsługujemy tylko dźwięk w tej przeglądarce.",
"sd": "SD",
"sdTooltip": "Podgląd obrazu w standardowej rozdzielczości",
"standardDefinition": "Standardowa rozdzielczość"
},
"videothumbnail": {
"connectionInfo": "Informacje o połączeniu",
"domute": "Wyciszenie",
"domuteVideo": "Wyłącz kamerę",
"domuteOthers": "Wycisz pozostałych",
"domuteVideoOfOthers": "Wyłącz kamerę pozostałym",
"flip": "Odwrócenie",
"grantModerator": "Przyznaj prawa moderatora",
"kick": "Wyrzuć",
@@ -835,9 +1060,11 @@
"muted": "Wyciszony",
"remoteControl": "Kontrola zdalna",
"show": "Pokaż na scenie",
"videomute": "Uczestnik zatrzymał kamerę"
"videomute": "Uczestnik zatrzymał kamerę",
"videoMuted": "Kamera wyłączona"
},
"welcomepage": {
"addMeetingName": "Dodaj nazwę spotkania",
"accessibilityLabel": {
"join": "Stuknij aby dołączyć",
"roomname": "Podaj nazwę sali konferencyjnej"
@@ -854,8 +1081,14 @@
"getHelp": "Pomoc",
"go": "Dalej",
"goSmall": "Dalej",
"headerTitle": "Jitsi Meet",
"headerSubtitle": "Bezpieczne i wysokiej jakości spotkania",
"info": "Informacje",
"join": "Utwórz / Dołącz",
"jitsiOnMobile": "Jitsi mobile pobierz appkę i rozpocznij spotkanie z dowolnego miejsca",
"mobileDownLoadLinkIos": "Pobierz appkę dla systemu iOS",
"mobileDownLoadLinkAndroid": "Pobierz appkę dla systemu Android",
"mobileDownLoadLinkFDroid": "Pobierz appkę dla systemu F-Droid",
"moderatedMessage": "lub <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">zarezerwuj adres spotkania</a> jeśli jesteś jedynym moderatorem.",
"privacy": "Polityka prywatności",
"recentList": "Niedawno",
@@ -866,9 +1099,18 @@
"roomname": "Podaj nazwę sali konferencyjnej",
"roomnameHint": "Wprowadź nazwę lub adres URL pokoju, do którego chcesz dołączyć. Możesz wymyślić nazwę, po prostu pozwól, aby osoby, z którymi się spotykasz, znały ją tak, aby wpisały tę samą nazwę.",
"sendFeedback": "Wyślij opinię",
"startMeeting": "Rozpocznij spotkanie",
"terms": "Warunki korzystania",
"title": "Bezpieczna, w pełni funkcjonalna i całkowicie bezpłatna wideokonferencja"
},
"title": "Bezpieczna, w pełni funkcjonalna i całkowicie bezpłatna wideokonferencja",
"logo": {
"calendar": "Logo kalendarza",
"microsoftLogo": "Logo Microsoftu",
"logoDeepLinking": "Logo Jitsi meet",
"desktopPreviewThumbnail": "Miniatura podglądu pulpitu",
"googleLogo": "Logo Google",
"policyLogo": "Logo polityki"
}
},
"lonelyMeetingExperience": {
"button": "Zaproś innych uczestników",
"youAreAlone": "Tylko ty uczestniczysz w tym spotkaniu"
@@ -877,6 +1119,8 @@
"header": "Centrum pomocy"
},
"lobby": {
"admit": "Pozwól",
"admitAll": "Pozwól wszystkim",
"knockingParticipantList": "Oczekujący uczestnicy",
"allow": "Zezwól",
"backToKnockModeButton": "Brak hasła, poproś o dołączenie",
@@ -889,6 +1133,7 @@
"enableDialogText": "Lobby umożliwia zabezpieczenie spotkania przed dostępem niechcianych osób. Uczestnik może dołączyć do spotkania tylko po zaakceptowaniu przez moderatora.",
"enterPasswordButton": "Hasło spotkania",
"enterPasswordTitle": "Wprowadź hasło aby dołączyć",
"errorMissingPassword": "Proszę wprowadź hasło do spotkania",
"invalidPassword": "Nieprawidłowe hasło",
"joiningMessage": "Dołączysz do spotkania po zaakceptowaniu Twojej prośby",
"joinWithPasswordMessage": "Dołączanie z hasłem, proszę czekać...",
@@ -907,6 +1152,7 @@
"passwordField": "Wprowadź hasło",
"passwordJoinButton": "Dołącz",
"reject": "Odrzuć",
"rejectAll": "Odrzuć wszystkich",
"toggleLabel": "Włącz / Wyłącz lobby"
}
}

View File

@@ -31,9 +31,9 @@
},
"audioDevices": {
"bluetooth": "Bluetooth",
"headphones": "Fones de ouvido",
"headphones": "Auscultadores",
"phone": "Telemóvel",
"speaker": "Alto-falantes",
"speaker": "Altifalante",
"none": "Sem dispositivos de áudio disponíveis"
},
"audioOnly": {
@@ -58,19 +58,34 @@
"today": "Hoje"
},
"chat": {
"enter": "Entrar na sala",
"error": "Erro: a sua mensagem não foi enviada. Motivo: {{error}}",
"fieldPlaceHolder": "",
"messagebox": "Digite uma mensagem",
"fieldPlaceHolder": "Escreva aqui a sua mensagem",
"messagebox": "Escreva uma mensagem",
"messageTo": "Mensagem privada para {{recipient}}",
"noMessagesMessage": "",
"noMessagesMessage": "Ainda não há mensagens na reunião. Comece aqui uma conversa!",
"nickname": {
"popover": "Escolha um apelido",
"title": "Digite um apelido para usar na conversação"
"title": "Introduza um apelido para usar no chat e nas sondagens"
},
"privateNotice": "Mensagem privada para {{recipient}}",
"title": "Conversação",
"message": "Mensagem",
"messageAccessibleTitle": "{{user}} disse:",
"messageAccessibleTitleMe": "Você disse:",
"smileysPanel": "Painel de Emojis",
"tabs": {
"chat": "Chat",
"polls": "Sondagens"
},
"title": "Chat e Sondagens",
"you": "você"
},
"chromeExtensionBanner": {
"installExtensionText": "Instalar a extensão para a integração Google Calendar e Office 365",
"buttonText": "Instalar extensão do Chrome",
"dontShowAgain": "Não me mostre isto outra vez",
"close": "Fechar"
},
"connectingOverlay": {
"joiningRoom": "A ligá-lo à reunião…"
},
@@ -84,27 +99,34 @@
"DISCONNECTED": "Desligado",
"DISCONNECTING": "A desligar",
"ERROR": "Erro",
"RECONNECTING": "Ocorreu um problema de rede. A religar..."
"FETCH_SESSION_ID": "Obtenção da session-id...",
"GET_SESSION_ID_ERROR": "Obter erro de session-id: {{code}}",
"GOT_SESSION_ID": "Obtenção da session-id... Feito",
"LOW_BANDWIDTH": "Vídeo para {{displayName}} foi desligada para poupar largura de banda"
},
"connectionindicator": {
"address": "Endereço:",
"audio_ssrc": "Áudio SSRC:",
"bandwidth": "Largura de banda estimada:",
"bitrate": "Taxa de bits:",
"bridgeCount": "Servidores: ",
"codecs": "Codecs (A/V): ",
"connectedTo": "Ligado a:",
"e2e_rtt": "E2E RTT:",
"framerate": "Taxa de frames:",
"less": "Mostrar menos",
"localaddress": "Endereço local:",
"localaddress_plural": "Endereços locais:",
"localport": "Porta local:",
"localport_plural": "Portas locais:",
"maxEnabledResolution": "enviar máx",
"more": "Mostrar mais",
"packetloss": "Perda de pacote:",
"quality": {
"good": "Boa",
"inactive": "Inativo",
"lost": "Perdido",
"nonoptimal": "Não ótima",
"nonoptimal": "Não é ótima",
"poor": "Pobre"
},
"remoteaddress": "Endereço remoto:",
@@ -112,9 +134,12 @@
"remoteport": "Porta remota:",
"remoteport_plural": "Portas remotas:",
"resolution": "Resolução:",
"savelogs": "Guardar registos",
"participant_id": "Participante id:",
"status": "Ligação:",
"transport": "Transporte:",
"transport_plural": "Transportes:"
"transport_plural": "Transportes:",
"video_ssrc": "Vídeo SSRC:"
},
"dateUtils": {
"earlier": "Mais cedo",
@@ -125,17 +150,19 @@
"appNotInstalled": "Precisa da aplicação móvel {{app}} para participar na reunião com o seu telefone.",
"description": "Não acontece nada? Estamos a tentar iniciar a sua reunião na aplicação desktop {{app}}. Tente novamente ou inicie na aplicação web {{app}}.",
"descriptionWithoutWeb": "Não aconteceu nada? Tentamos iniciar a sua reunião na aplicação desktop {{app}}.",
"downloadApp": "Transfira a Aplicação",
"downloadApp": "Transfira a aplicação",
"ifDoNotHaveApp": "Se ainda não tem a aplicação:",
"ifHaveApp": "Se já tem a aplicação:",
"joinInApp": "Participe nesta reunião utilizando a aplicação",
"launchWebButton": "Iniciar na web",
"openApp": "Continue na aplicação",
"title": "A iniciar a sua reunião na {{app}}...",
"tryAgainButton": "Tente novamente no desktop"
},
"defaultLink": "ex.: {{url}}",
"defaultNickname": "ex.: João Pedro",
"deviceError": {
"cameraError": "Falha ao aceder à sua câmera",
"cameraPermission": "Erro ao obter permissão para a câmera",
"cameraError": "Falha ao aceder à sua câmara",
"cameraPermission": "Erro ao obter permissão para a câmara",
"microphoneError": "Falha ao aceder ao seu microfone",
"microphonePermission": "Erro ao obter permissão para o microfone"
},
@@ -182,16 +209,15 @@
"dismiss": "Dispensar",
"displayNameRequired": "Olá! Qual é o seu nome?",
"done": "Feito",
"e2eeDescription": "A encriptação de ponta a ponta é actualmente EXPERIMENTAL. Tenha em mente que ligar a encriptação de ponta a ponta irá efectivamente desactivar os serviços fornecidos do lado do servidor, tais como: gravação, transmissão em directo e participação telefónica. Tenha também em mente que o encontro só funcionará para pessoas que se juntem a partir de browsers com suporte para \"insertable streams\".",
"e2eeLabel": "Habilitar encriptação de ponta a ponta",
"e2eeDescription": "A encriptação de ponta a ponta é actualmente EXPERIMENTAL. Tenha em mente que ligar a encriptação de ponta a ponta irá efectivamente desactivar os serviços fornecidos do lado do servidor, tais como: participação telefónica. Tenha também em mente que o encontro só funcionará para pessoas que se juntem a partir de browsers com suporte para \"insertable streams\".", "e2eeLabel": "Habilitar encriptação de ponta a ponta",
"e2eeWarning": "AVISO: Nem todos os participantes neste encontro parecem ter apoio para a encriptação de ponta a ponta. Se o permitir, eles não o poderão ver nem ouvir.",
"enterDisplayName": "Digite o seu nome aqui",
"enterDisplayNameToJoin": "Por favor, digite o seu nome para participar",
"embedMeeting": "Embutir reunião",
"error": "Erro",
"gracefulShutdown": "O nosso serviço está atualmente em manutenção. Por favor, tente novamente mais tarde.",
"grantModeratorDialog": "Tem a certeza de que quer fazer deste participante um moderador?",
"grantModeratorTitle": "Converter em moderador",
"hideShareAudioHelper": "Não mostrar esta caixa de diálogo novamente",
"IamHost": "Eu sou o anfitrião",
"incorrectRoomLockPassword": "Palavra-passe incorreta",
"incorrectPassword": "Nome de utilizador ou palavra-passe incorretos",
@@ -232,7 +258,7 @@
"muteEveryoneSelf": "você mesmo",
"muteEveryoneStartMuted": "A partir de agora, toda a gente começa a ficar calada",
"muteParticipantBody": "Não poderá reativá-los, mas eles podem reativar-se a qualquer momento.",
"muteParticipantButton": "Mudo",
"muteParticipantButton": "Silenciar",
"muteParticipantDialog": "Tem a certeza de que quer silenciar este participante? Não poderá reativá-los, mas eles podem reativar-se a qualquer momento.",
"muteParticipantTitle": "Silenciar este participante?",
"muteParticipantsVideoButton": "Desativar a câmara",
@@ -277,11 +303,11 @@
"sessTerminated": "Chamada terminada",
"sessionRestarted": "Chamada reiniciada pela ponte",
"Share": "Partilhar",
"shareVideoLinkError": "Por favor, forneça uma ligação correcta ao youtube.",
"shareVideoLinkError": "Por favor, forneça um link correcto do vídeo.",
"shareVideoTitle": "Partilhar vídeo",
"shareYourScreen": "Partilhe o seu ecrã",
"shareYourScreenDisabled": "Partilha de ecrã desactivada.",
"startLiveStreaming": "Iniciar a transmissão em directo",
"startLiveStreaming": "Iniciar a transmissão em direto",
"startRecording": "Iniciar gravação",
"startRemoteControlErrorMessage": "Ocorreu um erro ao tentar iniciar a sessão de controlo remoto!",
"stopLiveStreaming": "Parar a transmissão em direto",
@@ -299,7 +325,7 @@
"user": "Utilizador",
"userIdentifier": "Identificador do utilizador",
"userPassword": "Palavra-passe do utilizador",
"videoLink": "Ligação do vídeo",
"videoLink": "Link do vídeo",
"WaitForHostMsg": "A conferência <b>{{room}}</b> ainda não começou. Se for o anfitrião, por favor autentique. Caso contrário, por favor aguarde que o anfitrião chegue.",
"WaitForHostMsgWOk": "A conferência <b>{{room}}</b> ainda não começou. Se for o anfitrião, por favor prima Ok para autenticar. Caso contrário, por favor aguarde que o anfitrião chegue.",
"WaitingForHostTitle": "À espera do anfitrião ...",
@@ -314,51 +340,88 @@
"documentSharing": {
"title": "Documento compartilhado"
},
"e2ee": {
"labelToolTip": "A comunicação áudio e vídeo nesta chamada é encriptada de ponta a ponta"
},
"embedMeeting": {
"title": "Incorporar esta reunião"
},
"virtualBackground": {
"apply": "Aplicar",
"title": "Planos de Fundo virtuais",
"blur": "Desfocagem",
"slightBlur": "Desfocagem ligeira",
"removeBackground": "Remover imagem de fundo",
"addBackground": "Adicionar imagem de fundo",
"pleaseWait": "Por favor aguarde...",
"none": "Nenhum",
"uploadedImage": "Imagem carregada {{index}}",
"deleteImage": "Apagar imagem",
"image1" : "Praia",
"image2" : "Parede branca neutra",
"image3" : "Quarto branco vazio",
"image4" : "Luminária preta",
"image5" : "Montanha",
"image6" : "Floresta ",
"image7" : "Nascer do sol",
"desktopShareError": "Não foi possível partilhar a área de trabalho",
"desktopShare":"Partilhar área de trabalho",
"webAssemblyWarning": "WebAssembly não suportado",
"backgroundEffectError": "Falha ao aplicar efeito de fundo."
},
"feedback": {
"average": "Média",
"bad": "Ruim",
"detailsLabel": "Nos conte mais sobre isso.",
"bad": "",
"detailsLabel": "Conte-nos mais sobre isso.",
"good": "Boa",
"rateExperience": "Avalie sua experiência na reunião",
"veryBad": "Muito ruim",
"veryGood": "Muito boa"
"veryBad": "Muito má",
"veryGood": "Muito boa",
"star": "Estrela"
},
"incomingCall": {
"answer": "Responder",
"audioCallTitle": "Chamada recebida",
"decline": "Dispensar",
"decline": "Recusar",
"productLabel": "do Jitsi Meet",
"videoCallTitle": "Chamada de vídeo recebida"
},
"info": {
"accessibilityLabel": "Mostrar info",
"addPassword": "Adicione $t(lockRoomPassword)",
"cancelPassword": "Cancela $t(lockRoomPassword)",
"accessibilityLabel": "Mostrar informação",
"addPassword": "Adicionar $t(lockRoomPassword)",
"cancelPassword": "Cancelar $t(lockRoomPassword)",
"conferenceURL": "Link:",
"country": "País",
"dialANumber": "Para entrar na reunião, disque um desses números e depois insira o PIN.",
"dialANumber": "Para se juntar à sua reunião, marque um destes números e depois introduza o PIN.",
"dialInConferenceID": "PIN:",
"dialInNotSupported": "Desculpe, a discagem não é atualmente suportada.",
"dialInNumber": "Discar:",
"dialInSummaryError": "Ocorreu um erro ao buscar a informação de discagem. Tente novamente mais tarde.",
"dialInTollFree": "Chamada gratuita",
"genericError": "Oops, alguma coisa deu errado.",
"inviteLiveStream": "Para ver a transmissão ao vivo da reunião, clique no link: {{url}}",
"invitePhone": "Para participar por telefone, toque aqui: {{number}} ,, {{conferenceID}} # \\ n",
"invitePhoneAlternatives": "Procurando um número de discagem diferente?\nVeja os números de discagem da reunião: {{url}} \n\n\nSe você também estiver discando através de um telefone da sala, participe sem conectar-se ao áudio: {{silentUrl}}",
"inviteURLFirstPartGeneral": "Você foi convidado para uma reunião.",
"inviteURLFirstPartPersonal": "{{name}} está convidando você para uma reunião.\n",
"inviteURLSecondPart": "\nEntre na reunião:\n{{url}}\n",
"liveStreamURL": "Transmissão ao vivo:",
"copyNumber":"Copiar número",
"dialInNotSupported": "Desculpe, a marcação telefónica não é de momento suportada.",
"dialInNumber": "Marcar:",
"dialInSummaryError": "Ocorreu um erro durante a captura de informação da marcação. Por favor, tente novamente mais tarde.",
"dialInTollFree": "Ligação gratuita",
"genericError": "Whoops, algo correu mal.",
"inviteLiveStream": "Para ver a transmissão em direto desta reunião, clique neste link: {{url}}",
"invitePhone": "Para entrar por telefone, toque aqui: {{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "À procura de um número de telefone diferente?\nVeja os números de telefone da reunião: {{url}}\n\n\nSe ligar através de um telefone de quarto, junte-se com o microfone desligado: {{silentUrl}}",
"inviteSipEndpoint": "Para entrar utilizando o endereço SIP, insira este: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} está a convidá-lo para uma reunião.",
"inviteTextiOSJoinSilent": "Se ligar através de um telefone de quarto, utilize este link para entrar com o microfone desligado: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "Clique no seguinte link para entrar: {{inviteUrl}}.",
"inviteTextiOSPhone": "Para entrar através do telefone, utilize este número: {{number}},,{{conferenceID}}#. Se estiver à procura de um número diferente, esta é a lista completa: {{didUrl}}.",
"inviteURLFirstPartGeneral": "Está convidado a entrar numa reunião.",
"inviteURLFirstPartPersonal": "{{name}} está a convidá-lo para uma reunião.\n",
"inviteURLSecondPart": "\nEntrar na reunião:\n{{url}}\n",
"liveStreamURL": "Transmissão em direto:",
"moreNumbers": "Mais números",
"noNumbers": "Sem números de discagem.",
"noNumbers": "Sem números de telefone.",
"noPassword": "Nenhum",
"noRoom": "Nenhuma sala foi especificada para entrar.",
"numbers": "Números de discagem",
"noRoom": "Não foi especificado nenhuma sala para ligar.",
"numbers": "Números para entrar por chamada telefónica",
"password": "$t(lockRoomPasswordUppercase):",
"title": "Compartilhar",
"tooltip": "Compartilhar link e discagem para esta reunião",
"label": "Informações da reunião"
"sip": "Endereços SIP",
"title": "Partilhar",
"tooltip": "Partilhar link e acesso telefónico para esta reunião",
"label": "Informação da reunião"
},
"inviteDialog": {
"alertText": "Não foi possível convidar alguns participantes.",
@@ -377,49 +440,49 @@
"keyboardShortcuts": {
"focusLocal": "Focar no seu vídeo",
"focusRemote": "Focar no vídeo de outro participante",
"fullScreen": "Entrar ou sair da tela cheia",
"fullScreen": "Entrar ou sair do ecrã completo",
"keyboardShortcuts": "Atalhos de teclado",
"localRecording": "Mostrar ou ocultar controlos de gravação local",
"mute": "Deixar mudo ou não o microfone",
"mute": "Ligar ou desligar o seu microfone",
"pushToTalk": "Pressione para falar",
"raiseHand": "Erga ou baixe sua mão",
"showSpeakerStats": "Exibir estatísticas do alto falante",
"toggleChat": "Abrir ou fechar o painel de bate-papo",
"raiseHand": "Levantar ou baixar a sua mão",
"showSpeakerStats": "Mostrar as estatísticas dos participantes",
"toggleChat": "Abrir ou fechar o painel de chat",
"toggleFilmstrip": "Mostrar ou ocultar miniaturas de vídeo",
"toggleScreensharing": "Trocar entre câmera e compartilhamento de tela",
"toggleParticipantsPane": "Mostrar ou ocultar o painel de participantes",
"toggleScreensharing": "Alternar entre a partilha de câmara e de ecrã",
"toggleShortcuts": "Mostrar ou ocultar atalhos de teclado",
"videoMute": "Iniciar ou parar sua câmera",
"videoQuality": "Gerenciar qualidade da chamada"
"videoMute": "Iniciar ou parar a sua câmara"
},
"liveStreaming": {
"busy": "Estamos trabalhando para liberar os recursos de transmissão. Tente novamente em alguns minutos.",
"busyTitle": "Todas as transmissões estão atualmente ocupadas",
"changeSignIn": "Alternar contas.",
"choose": "Escolha uma transmissão ao vivo",
"choose": "Escolha uma transmissão em direto",
"chooseCTA": "Escolha uma opção de transmissão. Você está conectado atualmente como {{email}}.",
"enterStreamKey": "Insira sua chave de transmissão ao vivo do YouTube aqui.",
"error": "Falha na transmissão ao vivo. Tente de novo.",
"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.",
"errorLiveStreamNotEnabled": "Transmissão ao vivo não está ativada em {{email}}. Ative a transmissão ao vivo ou registre numa conta com transmissão ao vivo ativada.",
"expandedOff": "A transmissão ao vivo foi encerrada",
"errorLiveStreamNotEnabled": "Transmissão em direto não está ativada em {{email}}. Ative a transmissão em direto ou registre numa conta com transmissão direto ativada.",
"expandedOff": "A transmissão em direto foi encerrada",
"expandedOn": "A reunião está sendo transmitida pelo YouTube.",
"expandedPending": "Iniciando a transmissão ao vivo...",
"failedToStart": "Falha ao iniciar a transmissão ao vivo",
"getStreamKeyManually": "Não conseguimos buscar nenhuma transmissão ao vivo. Tente obter sua chave de transmissão ao vivo no YouTube.",
"invalidStreamKey": "A senha para transmissão ao vivo pode estar incorreta.",
"off": "Transmissão ao vivo encerrada",
"offBy": "{{name}} parou a transmissão ao vivo",
"on": "Transmissão ao Vivo",
"onBy": "{{name}} iniciou a transmissão ao vivo",
"pending": "Iniciando Transmissão ao Vivo...",
"serviceName": "Serviço de Transmissão ao Vivo",
"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.",
"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",
"on": "Transmissão em Direto",
"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:",
"signIn": "Faça login no Google",
"signInCTA": "Faça login ou insira sua chave de transmissão ao vivo do YouTube.",
"signInCTA": "Faça login ou insira sua chave de transmissão em Direto do YouTube.",
"signOut": "Sair",
"start": "Iniciar uma transmissão ao vivo",
"start": "Iniciar uma transmissão em direto",
"streamIdHelp": "O que é isso?",
"unavailableTitle": "Transmissão ao vivo indisponível"
"unavailableTitle": "Transmissão em direto indisponível"
},
"localRecording": {
"clientState": {
@@ -465,31 +528,104 @@
"focus": "Foco da conferência",
"focusFail": "{{component}} não disponĩvel - tente em {{ms}} seg.",
"grantedTo": "Direitos de moderador concedido para {{to}}!",
"hostAskedUnmute": "O anfitrião deseja que você ative o som",
"invitedOneMember": "{{displayName}} foi convidado",
"invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados",
"invitedTwoMembers": "{{first}} e {{second}} foram convidados",
"kickParticipant": "{{kicked}} foi chutado por {{kicker}}",
"kickParticipant": "{{kicked}} foi expulso por {{kicker}}",
"me": "Eu",
"moderator": "Direitos de moderador concedidos!",
"muted": "Você iniciou uma conversa em mudo.",
"mutedTitle": "Você está mudo!",
"muted": "Você iniciou uma conversa com o microfone desativado.",
"mutedTitle": "Você está silenciado!",
"mutedRemotelyTitle": "Você foi silenciado por {{participantDisplayName}}!",
"mutedRemotelyDescription": "Você sempre pode ativar o som quando estiver pronto para falar. Retire o som quando terminar para manter o ruído longe da reunião.",
"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 desactivada por {{participantDisplayName}}!",
"videoMutedRemotelyDescription": "Pode sempre ligá-la novamente.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removido por outro participante",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) definido por outro participante",
"raisedHand": "{{name}} gostaria de falar.",
"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!",
"somebody": "Alguém",
"startSilentTitle": "Você 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",
"unmute": "Ativar som",
"newDeviceCameraTitle": "Nova câmera detectada",
"newDeviceAudioTitle": "Novo dispositivo de áudio detectado",
"newDeviceAction": "Usar"
"newDeviceCameraTitle": "Nova câmara detetada",
"newDeviceAudioTitle": "Novo dispositivo de áudio detetado",
"newDeviceAction": "Usar",
"OldElectronAPPTitle": "Vulnerabilidade de segurança!",
"oldElectronClientDescription1": "Parece estar a utilizar uma versão antiga do cliente Jitsi Meet que tem vulnerabilidades de segurança conhecidas. Por favor, certifique-se de que actualiza a nossa ",
"oldElectronClientDescription2": "compilação mais recente",
"oldElectronClientDescription3": " agora!",
"moderationInEffectDescription": "Por favor, levante a mão se quiser falar",
"moderationInEffectCSDescription": "Por favor, levante a mão se quiser partilhar o seu vídeo",
"moderationInEffectVideoDescription": "Por favor, levante a mão se quiser que o seu vídeo seja visível",
"moderationInEffectTitle": "O microfone foi silenciado pelo moderador",
"moderationInEffectCSTitle": "A partilha de conteúdos foi desativada pelo moderador",
"moderationInEffectVideoTitle": "O vídeo foi desativado pelo moderador",
"moderationRequestFromModerator": "O anfitrião deseja que você ative o som",
"moderationRequestFromParticipant": "Quer falar",
"moderationStartedTitle": "Início da moderação",
"moderationStoppedTitle": "A moderação parou",
"moderationToggleDescription": "pelo {{participantDisplayName}}",
"raiseHandAction": "Levantar a mão",
"reactionSounds": "Desactivar sons",
"groupTitle": "Notificações"
},
"participantsPane": {
"close": "Fechar",
"header": "Participantes",
"headings": {
"lobby": "Sala de espera ({{count}})",
"participantsList": "Participantes da reunião ({{count}})",
"waitingLobby": "Aguardam na sala de espera ({{count}})"
},
"actions": {
"allow": "Permitir aos participantes:",
"blockEveryoneMicCamera": "Bloquear o microfone e a câmara de todos",
"invite": "Convidar alguém",
"askUnmute": "Pedir para ligar o microfone",
"mute": "Silenciar",
"muteAll": "Silenciar todos",
"muteEveryoneElse": "Silenciar todos os outros",
"startModeration": "Ligar o microfone ou a câmara.",
"stopEveryonesVideo": "Desligar a câmara de todos",
"stopVideo": "Desligar a câmara",
"unblockEveryoneMicCamera": "Desbloquear o microfone e a câmara de todos"
}
},
"passwordSetRemotely": "Definido por outro participante",
"passwordDigitsOnly": "Até {{number}} dígitos",
"polls": {
"create": {
"addOption": "Adicionar opção",
"answerPlaceholder": "Opção {{index}}",
"create": "Criar uma sondagem",
"cancel": "Cancelar",
"pollOption" : "Opção de sondagem {{index}}",
"pollQuestion" : "Pergunta de Sondagem",
"questionPlaceholder": "Faça uma pergunta",
"removeOption": "Remover opção",
"send": "Enviar"
},
"answer": {
"skip": "Ignorar",
"submit": "Submeter"
},
"results": {
"vote": "Voto",
"changeVote": "Mudar o voto",
"empty": "Ainda não há sondagens na reunião. Comece aqui uma sondagem!",
"hideDetailedResults": "Ocultar detalhes",
"showDetailedResults": "Mostrar detalhes"
},
"notification": {
"title": "Uma nova sondagem foi adicionada a esta reunião",
"description": "Abrir o separador das sondagens para votar"
}
},
"poweredby": "distribuído por",
"prejoin": {
"audioAndVideoError": "Erro no áudio e vídeo:",
@@ -520,7 +656,7 @@
"videoLowQuality": "Prevemos que o seu vídeo tenha baixa qualidade em termos de velocidade de fotogramas e resolução.",
"videoTearing": "Prevemos que o seu vídeo seja pixelizado ou que tenha artefactos visuais."
},
"copyAndShare": "Copiar e partilhar a ligação da reunião.",
"copyAndShare": "Copiar e partilhar o link da reunião.",
"dialInMeeting": "Entrar com chamada telefónica",
"dialInPin": "Entrar com chamada telefónica e introduzir o código PIN:",
"dialing": "A marcar",
@@ -537,8 +673,8 @@
"joinMeeting": "Entrar na reunião",
"joinWithoutAudio": "Entrar sem áudio",
"initiated": "Chamada iniciada",
"linkCopied": "Ligação copiada para a área de transferência",
"lookGood": "Parece que o seu microfone está a funcionar corretamente",
"linkCopied": "Link copiado para a área de transferência",
"lookGood": "O microfone está a funcionar corretamente",
"or": "ou",
"premeeting": "Pré-reunião",
"showScreen": "Ativar o ecrã de pré-reunião",
@@ -582,7 +718,7 @@
"expandedPending": "Iniciando gravação...",
"failedToStart": "Falha ao iniciar a gravação",
"fileSharingdescription": "Compartilhar gravação com participantes da reunião",
"live": "AOVIVO",
"live": "DIRETO",
"loggedIn": "Conectado como {{userName}}",
"off": "Gravação parada",
"offBy": "{{name}} parou a gravação",
@@ -600,6 +736,12 @@
"sectionList": {
"pullToRefresh": "Puxe para atualizar"
},
"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"
},
"settings": {
"calendar": {
"about": "A integração do calendário {{appName}} é utilizada para aceder com segurança ao seu calendário para que este possa ler os próximos eventos.",
@@ -614,7 +756,7 @@
"devices": "Dispositivos",
"followMe": "Todos me seguem",
"framesPerSecond": "fotogramas-por-segundo",
"incomingMessage": "Receber mensagem",
"incomingMessage": "Receber uma mensagem",
"language": "Idioma",
"loggedIn": "Sessão iniciada como {{name}}",
"microphones": "Microfones",
@@ -622,9 +764,10 @@
"more": "Mais",
"name": "Nome",
"noDevice": "Nenhum",
"participantJoined": "Entrar participante",
"participantLeft": "Sair participante",
"participantJoined": "Entrar um participante",
"participantLeft": "Sair um participante",
"playSounds": "Reproduzir som quando",
"reactions": "Reações de reunião",
"sameAsSystem": "O mesmo que o sistema ({{label}})",
"selectAudioOutput": "Saída de áudio",
"selectCamera": "Câmara",
@@ -633,7 +776,7 @@
"speakers": "Participantes",
"startAudioMuted": "Todos começam com microfone desligado",
"startVideoMuted": "Todos começam com câmara desligada",
"talkWhileMuted": "se fala e está com microfone desligado",
"talkWhileMuted": "Se fala e está com microfone desligado",
"title": "Definições"
},
"settingsView": {
@@ -659,18 +802,20 @@
"dialInfoText": "\n\n=====\n\nDeseja apenas discar no seu telefone?\n\n{{defaultDialInNumber}}Clique neste link para ver os números de telefone para esta reunião\n{{dialInfoPageUrl}}",
"mainText": "Clique no seguinte link para entrar na reunião:{{roomUrl}}\n"
},
"speaker": "Alto-falantes",
"speaker": "Participante",
"speakerStats": {
"search": "Pesquisar",
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "Nome",
"seconds": "{{count}}s",
"speakerStats": "Estatísticas do Apresentador",
"speakerTime": "Tempo do Apresentador"
"speakerStats": "Estatísticas dos Participantes",
"speakerTime": "Tempo do Participante"
},
"startupoverlay": {
"policyText": " ",
"title": "O {{app}} precisa usar seu microfone e câmera."
"genericTitle": "A reunião precisa de usar o seu microfone e câmara.",
"title": "{{app}} precisa de usar o seu microfone e câmara."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Reconectar",
@@ -689,7 +834,7 @@
"embedMeeting": "Reunião incorporada",
"feedback": "Deixar comentários",
"fullScreen": "Mudar para ecrã completo",
"grantModerator": "Atribuir Moderador",
"grantModerator": "Converter em moderador",
"hangup": "Sair da reunião",
"help": "Ajuda",
"invite": "Convidar pessoas",
@@ -700,7 +845,7 @@
"moreActions": "Mais ações",
"moreActionsMenu": "Menu de mais ações",
"moreOptions": "Mostrar mais opções",
"mute": "Mudo / Não mudo",
"mute": "Ativar / Desativar microfone",
"muteEveryone": "Silenciar a todos",
"muteEveryoneElse": "Silenciar todos os outros",
"muteEveryonesVideo": "Desativar a câmara de todos",
@@ -711,16 +856,17 @@
"profile": "Editar o seu perfil",
"raiseHand": "Levantar / Baixar a mão",
"recording": "Mudar gravação",
"remoteMute": "Participante mudo",
"remoteMute": "Participante sem som",
"remoteVideoMute": "Desativar a câmara do participante",
"security": "Opções de segurança",
"Settings": "Mudar configurações",
"shareaudio": "Partilhar áudio",
"sharedvideo": "Mudar a partilha de vídeos do YouTube",
"shareRoom": "Convidar alguém",
"shareYourScreen": "Iniciar / Parar de partilhar o seu ecrã",
"shareYourScreen": "Iniciar / Parar partilha de ecrã",
"shortcuts": "Mostrar / Esconder atalhos",
"show": "Mostrar no palco",
"silence": "Silêncio",
"speakerStats": "Mostrar / Esconder estatísticas dos participantes",
"tileView": "Mudar para vista em quadrícula",
"toggleCamera": "Mudar a câmara",
@@ -741,6 +887,8 @@
"callQuality": "Gerir a qualidade do vídeo",
"chat": "Abrir / Fechar chat",
"closeChat": "Fechar chat",
"closeReactionsMenu": "Fechar menu reações",
"disableReactionSounds": "Pode desactivar os sons de reacção para esta reunião",
"documentClose": "Fechar documento partilhado",
"documentOpen": "Abrir documento partilhado",
"download": "Descarregar as nossas aplicações",
@@ -761,7 +909,7 @@
"lowerYourHand": "Baixar a mão",
"moreActions": "Mais ações",
"moreOptions": "Mais opções",
"mute": "Mudo / Não mudo",
"mute": "Ativar / Desativar microfone",
"muteEveryone": "Silenciar todos",
"muteEveryonesVideo": "Desativar a câmara de todos",
"noAudioSignalTitle": "Não há nenhuma entrada vinda do seu microfone!",
@@ -778,19 +926,27 @@
"profile": "Editar o seu perfil",
"raiseHand": "Levantar / Baixar a mão",
"raiseYourHand": "Levantar a mão",
"reactionBoo": "Enviar reação de boo",
"reactionClap": "Enviar reação de aplauso",
"reactionLaugh": "Enviar reação de riso",
"reactionLike": "Enviar reação positiva",
"reactionParty": "Enviar reação de lança-confetes",
"reactionSilence": "Enviar reação de silêncio",
"reactionSurprised": "Enviar reação de surpresa",
"security": "Opções de segurança",
"Settings": "Definições",
"shareaudio": "Partilhar áudio",
"sharedvideo": "Partilhar vídeo",
"shareRoom": "Convidar alguém",
"shortcuts": "Ver atalhos",
"silence": "Silêncio",
"speakerStats": "Estatísticas dos participantes",
"startScreenSharing": "Iniciar partilha de ecrã",
"startSubtitles": "Iniciar legendas",
"stopScreenSharing": "Parar partilha de ecrã",
"stopSubtitles": "Parar legendas",
"stopSharedVideo": "Parar vídeo do YouTube",
"talkWhileMutedPopup": "Está a tentar falar? Está mudo.",
"talkWhileMutedPopup": "Está a tentar falar? Está com o microfone desativado.",
"tileViewToggle": "Mudar para vista em quadrícula",
"toggleCamera": "Mudar a câmara",
"videomute": "Iniciar / Parar câmara",
@@ -849,15 +1005,20 @@
"standardDefinition": "Definição padrão"
},
"videothumbnail": {
"domute": "Mudo",
"connectionInfo": "Informações sobre a ligação",
"domute": "Sem som",
"domuteVideo": "Desativar a câmara",
"domuteOthers": "Silenciar todos os outros",
"domuteVideoOfOthers": "Desactivar a câmara de todos os outros",
"flip": "Inverter",
"grantModerator": "Converter em moderador",
"kick": "Expulsar",
"moderator": "Moderador",
"mute": "Participante está mudo",
"muted": "Mudo",
"remoteControl": "Controle remoto",
"show": "Mostrar no palco",
"videomute": "O participante parou a câmera"
"mute": "Participante está sem som",
"muted": "Sem som",
"videomute": "O participante parou a câmara",
"remoteControl": "Iniciar / Parar controlo remoto",
"show": "Mostrar no palco"
},
"welcomepage": {
"accessibilityLabel": {
@@ -888,5 +1049,42 @@
"sendFeedback": "Enviar comentários",
"terms": "Termos",
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas"
},
"lobby": {
"admit": "Aceitar",
"admitAll": "Aceitar todos",
"knockingParticipantList": "Lista de participantes a expulsar",
"allow": "Permitir",
"backToKnockModeButton": "Peça para aderir",
"dialogTitle": "Modo sala de espera",
"disableDialogContent": "O modo sala de espera está actualmente activada. Esta característica assegura que os participantes indesejados não possam juntar-se à sua reunião. Quer desativá-la?",
"disableDialogSubmit": "Desativar",
"emailField": "Introduza o seu endereço de e-mail",
"enableDialogPasswordField": "Definir senha (opcional)",
"enableDialogSubmit": "Habilitar",
"enableDialogText": "O modo sala de espera permite-lhe proteger a sua reunião apenas permitindo a entrada de pessoas após uma aprovação formal por um moderador.",
"enterPasswordButton": "Introduza a senha da reunião",
"enterPasswordTitle": "Introduzir a senha para participar na reunião",
"errorMissingPassword": "Por favor introduza a senha da reunião",
"invalidPassword": "Senha inválida",
"joiningMessage": "Participará na reunião assim que alguém aceitar o seu pedido",
"joinWithPasswordMessage": "Tentando aderir com senha, por favor aguarde...",
"joinRejectedMessage": "O seu pedido de adesão foi rejeitado por um moderador.",
"joinTitle": "Junte-se à reunião",
"joiningTitle": "Pedir para participar na reunião...",
"joiningWithPasswordTitle": "Participando com senha...",
"knockButton": "Pedir para participar",
"knockTitle": "Alguém quer juntar-se à reunião",
"nameField": "Introduza o seu nome",
"notificationLobbyAccessDenied": "{{targetParticipantName}} foi recusada a adesão por {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} foi autorizado a aderir por {{originParticipantName}}",
"notificationLobbyDisabled": "A sala de espera foi desactivada por {{originParticipantName}}",
"notificationLobbyEnabled": "A sala de espera foi activada por {{originParticipantName}}",
"notificationTitle": "Sala de espera",
"passwordField": "Introduza a senha da reunião",
"passwordJoinButton": "Solicitar",
"reject": "Rejeitar",
"rejectAll": "Rejeitar todos",
"toggleLabel": "Ativar sala de espera"
}
}

View File

@@ -5,6 +5,7 @@
"copyInvite": "Copiar convite da reunião",
"copyLink": "Copiar link da reunião",
"copyStream": "Copiar link da transmissão ao vivo",
"contacts": "contatos",
"countryNotSupported": "Ainda não suportamos este destino.",
"countryReminder": "Ligando de fora dos EUA? Por favor, certifique-se de começar com o código do país!",
"defaultEmail": "Seu email padrão",
@@ -16,18 +17,14 @@
"inviteMoreMailSubject": "Entre na reunião {{appName}}",
"inviteMorePrompt": "Convide mais pessoas",
"linkCopied": "Link copiado para a área de transferência",
"loading": "Procurando por pessoas e números de telefone",
"loadingNumber": "Validando o número de telefone",
"loadingPeople": "Procurando por pessoas para convidar",
"noResults": "Nenhum resultado de busca correspondente",
"noValidNumbers": "Por favor, digite um número de telefone",
"outlookEmail": "E-mail Outlook ",
"searchNumbers": "Adicionar números de telefone",
"searchPeople": "Pesquisar pessoas",
"searchPeopleAndNumbers": "Pesquisar por pessoas ou adicionar seus números de telefone",
"phoneNumbers": "números de telefone",
"searching": "Procurando...",
"shareInvite": "Compartilhar convite da reunião",
"shareLink": "Compartilhando o link da reunião",
"shareStream": "Compartilhar o link da transmissão ao vivo",
"sipAddresses": "endereços SIP",
"telephone": "Telefone: {{number}}",
"title": "Convide pessoas para sua reunião",
"yahooEmail": "E-mail Yahoo"
@@ -61,6 +58,7 @@
"today": "Hoje"
},
"chat": {
"enter": "Entrar no bate-papo",
"error": "Erro: sua mensagem não foi enviada. Motivo: {{error}}",
"fieldPlaceHolder": "Digite sua mensagem aqui",
"messagebox": "Digite uma mensagem",
@@ -72,12 +70,17 @@
},
"privateNotice": "Mensagem privada para {{recipient}}",
"title": "Bate-papo",
"you": "você"
"you": "você",
"message": "Mensagem",
"messageAccessibleTitle": "{{user}} disse:",
"messageAccessibleTitleMe": "Você disse:",
"smileysPanel": "Painel de Emojis"
},
"chromeExtensionBanner": {
"installExtensionText": "Instale a extensão para integrar com Google Calendar e Office 365",
"buttonText": "Instalar extensão do Chrome",
"dontShowAgain": "Não me mostre isso de novo"
"dontShowAgain": "Não me mostre isso de novo",
"close": "Fechar"
},
"connectingOverlay": {
"joiningRoom": "Conectando você à reunião…"
@@ -174,12 +177,14 @@
"alreadySharedVideoMsg": "Outro participante já está compartilhando um vídeo. Esta conferência permite apenas um vídeo compartilhado por vez.",
"alreadySharedVideoTitle": "Somente um vídeo compartilhado é permitido por vez",
"applicationWindow": "Janela de aplicativo",
"authenticationRequired": "Autenticação requerida",
"Back": "Voltar",
"cameraConstraintFailedError": "Sua câmera não satisfaz algumas condições necessárias.",
"cameraNotFoundError": "A câmera não foi encontrada.",
"cameraNotSendingData": "Estamos incapazes de acessar sua câmera. Verifique se outra aplicação está usando este dispositivo, selecione outro dispositivo do menu de configurações ou recarregue a aplicação.",
"cameraNotSendingDataTitle": "Incapaz de acessar a câmera",
"cameraPermissionDeniedError": "Não foi permitido acessar a sua câmera. Você ainda pode entrar na conferência, mas sem exibir o seu vídeo. Clique no botão da câmera para tentar reparar.",
"cameraTimeoutError": "Não foi possível iniciar fonte de vídeo. Tempo esgotado!",
"cameraUnknownError": "Não pode usar a câmera por uma razão desconhecida.",
"cameraUnsupportedResolutionError": "Sua câmera não suporta a resolução de vídeo requerida.",
"Cancel": "Cancelar",
@@ -194,7 +199,7 @@
"connectError": "Oops! Alguma coisa está errada e nós não pudemos conectar à conferência.",
"connectErrorWithMsg": "Oops! Alguma coisa está errada e não podemos conectar à conferência: {{msg}}",
"connecting": "Conectando",
"contactSupport": "Contate o suporte",
"contactSupport": "Entrar em contato com o suporte",
"copied": "Copiado",
"copy": "Copiar",
"dismiss": "Dispensar",
@@ -204,28 +209,30 @@
"e2eeLabel": "Enable End-to-End Encryption",
"e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
"enterDisplayName": "Digite seu nome aqui",
"embedMeeting": "Reunião em formato compacto",
"error": "Erro",
"gracefulShutdown": "Nosso serviço está em manutenção. Tente novamente mais tarde.",
"grantModeratorDialog": "Tem certeza que quer participar como moderador da reunião?",
"grantModeratorTitle": "Permitir moderador",
"hideShareAudioHelper": "Não mostre este diálogo novamente",
"IamHost": "Eu sou o anfitrião",
"incorrectRoomLockPassword": "Senha incorreta",
"incorrectPassword": "Usuário ou senha incorretos",
"internalError": "Oops! Alguma coisa está errada. O seguinte erro ocorreu: {{error}}",
"internalErrorTitle": "Erro interno",
"kickMessage": "Você pode contatar com {{participantDisplayName}} para obter mais detalhes.",
"kickMessage": "Você pode entrar em contato com {{participantDisplayName}} para obter mais detalhes.",
"kickParticipantButton": "Remover",
"kickParticipantDialog": "Tem certeza de que deseja remover este participante?",
"kickParticipantTitle": "Chutar este participante?",
"kickTitle": "Ai! {{participantDisplayName}} expulsou você da reunião",
"kickParticipantTitle": "Remover este participante?",
"kickTitle": "{{participantDisplayName}} removeu você da reunião",
"liveStreaming": "Transmissão ao Vivo",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Não é possível transmitir enquanto a gravação está ativa",
"liveStreamingDisabledForGuestTooltip": "Visitantes não podem iniciar transmissão ao vivo.",
"liveStreamingDisabledTooltip": "Iniciar transmissão ao vivo desativada.",
"lockMessage": "Falha ao travar a conferência.",
"lockMessage": "Falha ao bloquear a conferência.",
"lockRoom": "Adicionar reunião $t(lockRoomPasswordUppercase)",
"lockTitle": "Bloqueio falhou",
"logoutQuestion": "Deseja encerrar a sessão e finalizar a conferência?",
"login": "Entrar",
"logoutTitle": "Encerrar sessão",
"maxUsersLimitReached": "O limite para o número máximo de participantes foi atingido. A conferência está cheia. Entre em contato com o proprietário da reunião ou tente novamente mais tarde!",
"maxUsersLimitReachedTitle": "Limite máximo de participantes atingido",
@@ -234,28 +241,42 @@
"micNotSendingData": "Vá para as configurações do seu computador para ativar o som do microfone e ajustar seu nível",
"micNotSendingDataTitle": "Seu microfone está mudo pelas configurações do sistema",
"micPermissionDeniedError": "Não foi permitido acessar o seu microfone. Você ainda pode entrar na conferência, mas sem enviar áudio. Clique no botão do microfone para tentar reparar.",
"micTimeoutError": "Não foi possível iniciar fonte de áudio. Tempo esgotado!",
"micUnknownError": "Não pode usar o microfone por uma razão desconhecida.",
"muteEveryoneElseDialog": "Uma vez silenciados, você não poderá reativar o som deles, mas eles poderão reativar o som a qualquer momento.",
"muteEveryoneElseTitle": "Silenciar todo mundo exceto {{whom}}?",
"muteEveryoneDialog": "Tem certeza que deseja silenciar todos? Você não poderá ativar o som deles, mas eles podem ativar o som eles mesmo a qualquer momento.",
"muteEveryoneTitle": "Silenciar todos?",
"muteEveryoneElsesVideoDialog": "Você não poderá reativar posteriormente, mas cada participante pode ativar sua própria câmera a qualquer momento.",
"muteEveryoneElsesVideoTitle": "Desativar a câmera de todos exceto {{whom}}?",
"muteEveryonesVideoDialog": "Tem certeza que deseja desativar a câmera de todos? Você não poderá reativar posteriormente, mas cada participante pode ativar sua própria câmera a qualquer momento.",
"muteEveryonesVideoDialogOk": "Desabilitar",
"muteEveryonesVideoTitle": "Desativar a câmera de todos?",
"muteEveryoneSelf": "a si próprio",
"muteEveryoneStartMuted": "Todos iniciam silenciados daqui para frente",
"muteParticipantBody": "Você não está habilitado para tirar o mudo deles, mas eles podem tirar o mudo deles mesmos a qualquer tempo.",
"muteParticipantButton": "Mudo",
"muteParticipantDialog": "Tem certeza de que deseja silenciar este participante? Você não poderá desfazer isso, mas o participante pode reabilitar o áudio a qualquer momento.",
"muteParticipantsVideoDialog": "Tem certeza de que deseja desativar a câmera deste participante? Você não poderá reativar posteriormente, mas o participante pode ativar sua própria câmera a qualquer momento.",
"muteParticipantTitle": "Deixar mudo este participante?",
"Ok": "Ok",
"passwordLabel": "A reunião foi travada por um participante. Por favor, insira a $t(lockRoomPassword) para entrar.",
"muteParticipantsVideoButton": "Desativar a câmera",
"muteParticipantsVideoTitle": "Desativar a câmera deste participante?",
"muteParticipantsVideoBody": "Você não poderá reativar posteriormente, mas o participante pode ativar sua própria câmera a qualquer momento.",
"noDropboxToken": "Nenhum token do Dropbox válido",
"Ok": "OK",
"password": "Senha",
"passwordLabel": "A reunião foi bloqueada por um participante. Por favor, insira a $t(lockRoomPassword) para entrar.",
"passwordNotSupported": "A configuração de uma reunião $t(lockRoomPassword) não é suportada.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) não suportado",
"passwordRequired": "$t(lockRoomPasswordUppercase) requerido",
"permissionErrorTitle": "Permissão necessária",
"permissionCameraRequiredError": "É necessário permitir acesso à câmera para participar de reuniões com vídeo. Ative a permissão nas configurações",
"permissionMicRequiredError": "É necessário permitir acesso ao microfone para participar de reuniões com áudio. Ative a permissão nas configurações",
"popupError": "Seu navegador está bloqueando janelas popup deste site. Habilite os popups nas configurações de segurança no seu navegador e tente novamente.",
"popupErrorTitle": "Popup bloqueado",
"readMore": "mais...",
"recording": "Gravando",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Não é possível transmitir enquanto a gravação está ativa",
"recordingDisabledForGuestTooltip": "Visitantes não podem iniciar gravações.",
"recordingDisabledTooltip": "Iniciar gravação desativada.",
"rejoinNow": "Reconectar agora",
"remoteControlAllowedMessage": "{{user}} aceitou sua requisição de controle remoto!",
@@ -272,7 +293,7 @@
"reservationError": "Erro de sistema de reserva",
"reservationErrorMsg": "Código do erro: {{code}}, mensagem: {{msg}}",
"retry": "Tentar novamente",
"screenSharingAudio": "Compartilha áudio",
"screenSharingAudio": "Compartilhar áudio",
"screenSharingFailed": "Oops! Alguma coisa de errado aconteceu, não é possível habilitar o compartilhamento de tela!",
"screenSharingFailedTitle": "Falha ao compartilhar a tela!",
"screenSharingPermissionDeniedError": "Oops! Alguma coisa está errada com suas permissões de compartilhamento de tela. Recarregue e tente de novo.",
@@ -282,15 +303,26 @@
"sendPrivateMessageTitle": "Enviar em privado?",
"serviceUnavailable": "Serviço indisponível",
"sessTerminated": "Chamada terminada",
"sessionRestarted": "Chamada reiniciada pelo bridge",
"Share": "Compartilhar",
"shareAudio": "Continuar",
"shareAudioTitle": "Como compartilhar áudio",
"shareAudioWarningTitle": "Você precisa parar o compartilhamento de tela antes de compartilhar seu áudio",
"shareAudioWarningH1": "Se você quiser compartilhar apenas seu áudio:",
"shareAudioWarningD1": "você precisa parar o compartilhamento de tela antes de compartilhar seu áudio.",
"shareAudioWarningD2": "você precisa reiniciar o compartilhamento de tela e selecionar a opção \"compartilhar áudio\".",
"shareMediaWarningGenericH2": "Se você quiser compartilhar sua tela e seu áudio",
"shareVideoLinkError": "Por favor, forneça um link do youtube correto.",
"shareVideoTitle": "Compartilhar um vídeo",
"shareYourScreen": "Compartilhar sua tela",
"shareYourScreenDisabled": "Compartilhamento de tela desativada.",
"shareYourScreenDisabledForGuest": "Visitantes não podem compartilhar tela.",
"startLiveStreaming": "Iniciar transmissão ao vivo",
"startRecording": "Iniciar gravação",
"startRemoteControlErrorMessage": "Um erro ocorreu enquanto tentava iniciar uma sessão de controle remoto!",
"shareScreenWarningTitle": "Você precisa parar o compartilhamento de áudio antes de compartilhar sua tela",
"shareScreenWarningH1": "Se você quiser compartilhar apenas sua tela:",
"shareScreenWarningD1": "você precisa parar o compartilhamento de áudio antes de compartilhar sua tela.",
"shareScreenWarningD2": "você precisa parar o compartilhamento de áudio, iniciar o compartilhamento de tela e selecionar a opção \"compartilhar áudio\".",
"stopLiveStreaming": "Parar transmissão ao vivo",
"stopRecording": "Parar a gravação",
"stopRecordingWarning": "Tem certeza que deseja parar a gravação?",
@@ -303,13 +335,20 @@
"tokenAuthFailedTitle": "Falha de autenticação",
"transcribing": "Transcrevendo",
"unlockRoom": "Remove a reunião $t(lockRoomPassword)",
"user": "Usuário",
"userIdentifier": "identificação do usuário",
"userPassword": "senha do usuário",
"videoLink": "Link do vídeo",
"viewUpgradeOptions": "Ver opções de atualização",
"viewUpgradeOptionsContent": "Para obter acesso ilimitado a recursos premium tais como gravação, transcrição, streaming RTMP e muito mais, você precisa atualizar seu plano.",
"viewUpgradeOptionsTitle": "Você descobriu um recurso premium!",
"WaitForHostMsg": "A conferência <b>{{room}}</b> ainda não começou. Se você é o anfitrião, faça a autenticação. Do contrário, aguarde a chegada do anfitrião.",
"WaitForHostMsgWOk": "A conferência <b>{{room}}</b> ainda não começou. Se você é o anfitrião, pressione Ok para autenticar. Do contrário, aguarde a chegada do anfitrião.",
"WaitingForHost": "Esperando o anfitrião...",
"WaitForHostMsgWOk": "A conferência <b>{{room}}</b> ainda não começou. Se você é o anfitrião, pressione OK para autenticar. Do contrário, aguarde a chegada do anfitrião.",
"WaitingForHostTitle": "Esperando o anfitrião...",
"Yes": "Sim",
"yourEntireScreen": "Toda sua tela"
"yourEntireScreen": "Toda sua tela",
"remoteUserControls": "Controles de usuários remotos de {{username}}",
"localUserControls": "Controles de usuários locais"
},
"dialOut": {
"statusMessage": "está agora {{status}}"
@@ -323,27 +362,27 @@
"embedMeeting": {
"title": "Reunião em formato compacto"
},
"virtualBackground": {
"apply": "Aplicar",
"title": "Fundos virtuais",
"blur": "Desfoque",
"slightBlur": "Desfoque suave",
"removeBackground": "Remover fundo",
"addBackground": "Adicionar novo fundo",
"pleaseWait": "Aguarde...",
"none": "Nenhum",
"uploadedImage": "Imagem enviada {{index}}",
"deleteImage": "Excluir imagem",
"image1" : "Praia",
"image2" : "Parede branca neutra",
"image3" : "Quarto branco vazio",
"image4" : "Luminária preta",
"image5" : "Montanha",
"image6" : "Floresta",
"image7" : "Alvorada",
"desktopShareError": "Não foi possível compartilhar o desktop",
"desktopShare":"Compartilhar desktop",
"webAssemblyWarning": "Não há suporte para WebAssembly"
"virtualBackground": {
"apply": "Aplicar",
"title": "Fundos virtuais",
"blur": "Desfoque",
"slightBlur": "Desfoque suave",
"removeBackground": "Remover fundo",
"addBackground": "Adicionar novo fundo",
"pleaseWait": "Aguarde...",
"none": "Nenhum",
"uploadedImage": "Imagem enviada {{index}}",
"deleteImage": "Excluir imagem",
"image1": "Praia",
"image2": "Parede branca neutra",
"image3": "Quarto branco vazio",
"image4": "Luminária preta",
"image5": "Montanha",
"image6": "Floresta",
"image7": "Alvorada",
"desktopShareError": "Não foi possível compartilhar o desktop",
"desktopShare": "Compartilhar desktop",
"webAssemblyWarning": "Não há suporte para WebAssembly"
},
"feedback": {
"average": "Média",
@@ -352,7 +391,8 @@
"good": "Boa",
"rateExperience": "Avalie sua experiência na reunião",
"veryBad": "Muito ruim",
"veryGood": "Muito boa"
"veryGood": "Muito boa",
"star": "Estrela"
},
"incomingCall": {
"answer": "Responder",
@@ -369,6 +409,7 @@
"country": "País",
"dialANumber": "Para entrar na reunião, disque um desses números e depois insira o PIN.",
"dialInConferenceID": "PIN:",
"copyNumber": "Copiar número",
"dialInNotSupported": "Desculpe, a discagem não é atualmente suportada.",
"dialInNumber": "Discar:",
"dialInSummaryError": "Ocorreu um erro ao buscar a informação de discagem. Tente novamente mais tarde.",
@@ -377,6 +418,11 @@
"inviteLiveStream": "Para ver a transmissão ao vivo da reunião, clique no link: {{url}}",
"invitePhone": "Para participar por telefone, toque aqui: {{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "Procurando um número de discagem diferente?\nVeja os números de discagem da reunião: {{url}} \n\n\nSe você também estiver discando através de um telefone da sala, participe sem conectar-se ao áudio: {{silentUrl}}",
"inviteSipEndpoint": "Para participar usando o endereço SIP, insira isto: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} está convidando você para uma reunião.",
"inviteTextiOSJoinSilent": "Se você estiver discando através de um telefone da sala, use este link para participar sem conectar-se ao áudio: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "Clique no seguinte link para entrar: {{inviteUrl}}.",
"inviteTextiOSPhone": "Para participar por telefone, use este número: {{number}},,{{conferenceID}}#. Se você estiver procurando um número diferente, esta é a lista completa: {{didUrl}}.",
"inviteURLFirstPartGeneral": "Você foi convidado para uma reunião.",
"inviteURLFirstPartPersonal": "{{name}} está convidando você para uma reunião.\n",
"inviteURLSecondPart": "\nEntre na reunião:\n{{url}}\n",
@@ -387,6 +433,7 @@
"noRoom": "Nenhuma sala foi especificada para entrar.",
"numbers": "Números de discagem",
"password": "$t(lockRoomPasswordUppercase):",
"sip": "endereço SIP",
"title": "Compartilhar",
"tooltip": "Compartilhar link e discagem para esta reunião",
"label": "Informações da reunião"
@@ -405,6 +452,7 @@
"support": "Suporte",
"supportMsg": "Se isso continuar acontecendo, chegar a"
},
"jitsiHome": "Logo de {{logo}} (direciona para página inicial)",
"keyboardShortcuts": {
"focusLocal": "Focar no seu vídeo",
"focusRemote": "Focar no vídeo de outro participante",
@@ -417,10 +465,10 @@
"showSpeakerStats": "Exibir estatísticas do alto falante",
"toggleChat": "Abrir ou fechar o painel de bate-papo",
"toggleFilmstrip": "Mostrar ou ocultar miniaturas de vídeo",
"toggleParticipantsPane": "Exibir ou ocultar o quadro de participantes",
"toggleScreensharing": "Trocar entre câmera e compartilhamento de tela",
"toggleShortcuts": "Mostrar ou ocultar atalhos de teclado",
"videoMute": "Iniciar ou parar sua câmera",
"videoQuality": "Gerenciar qualidade da chamada"
"videoMute": "Iniciar ou parar sua câmera"
},
"liveStreaming": {
"limitNotificationDescriptionWeb": "Devido a alta demanda sua transmissão será limitada a {{limit}} minutos. Para transmissão ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
@@ -496,19 +544,24 @@
"focus": "Foco da conferência",
"focusFail": "{{component}} não disponível - tente em {{ms}} seg",
"grantedTo": "Direitos de moderador concedido para {{to}}!",
"hostAskedUnmute": "O anfitrião deseja que você ative o som",
"invitedOneMember": "{{name}} foi convidado(a)",
"invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados",
"invitedTwoMembers": "{{first}} e {{second}} foram convidados",
"kickParticipant": "{{kicked}} foi chutado por {{kicker}}",
"kickParticipant": "{{kicked}} foi removido por {{kicker}}",
"me": "Eu",
"moderator": "Direitos de moderador concedidos!",
"muted": "Você iniciou uma conversa em mudo.",
"mutedTitle": "Você está mudo!",
"mutedRemotelyTitle": "Você foi silenciado por {{participantDisplayName}}!",
"mutedRemotelyDescription": "Você sempre pode ativar o som quando estiver pronto para falar. Retire o som quando terminar para manter o ruído longe da reunião.",
"videoMutedRemotelyTitle": "Sua câmera foi desativada por {{participantDisplayName}}!",
"videoMutedRemotelyDescription": "Você pode ativar sua câmera a qualquer momento.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removido por outro participante",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) definido por outro participante",
"raisedHand": "{{name}} gostaria de falar.",
"screenShareNoAudio": "O compartilhamento de áudio não foi selecionado na tela de escolha de janela.",
"screenShareNoAudioTitle": "Compartilhamento de áudio não selecionado",
"somebody": "Alguém",
"startSilentTitle": "Você entrou sem saída de áudio!",
"startSilentDescription": "Volte à reunião para habilitar o áudio",
@@ -521,18 +574,41 @@
"OldElectronAPPTitle": "Vulnerabilidade de segurança!",
"oldElectronClientDescription1": "Você está usando um versão antiga do cliente Jitsi Meet que possui uma conhecida vulnerabilidade de segurança. Por favor tenha certeza de atulizar para a nossa ",
"oldElectronClientDescription2": "última versão",
"oldElectronClientDescription3": " agora!"
"oldElectronClientDescription3": " agora!",
"moderationInEffectDescription": "Levante a mão se quiser falar",
"moderationInEffectCSDescription": "Levante a mão se quiser compartilhar seu vídeo",
"moderationInEffectVideoDescription": "Levante a mão se quiser que seu vídeo fique visível",
"moderationInEffectTitle": "O microfone foi silenciado pelo moderador",
"moderationInEffectCSTitle": "O compartilhamento de conteúdo foi desativado pelo moderador",
"moderationInEffectVideoTitle": "O vídeo foi desativado pelo moderador",
"moderationRequestFromModerator": "O anfitrião deseja que você ative o som",
"moderationRequestFromParticipant": "Quer falar",
"moderationStartedTitle": "Moderação iniciada",
"moderationStoppedTitle": "Moderação encerrada",
"moderationToggleDescription": "por {{participantDisplayName}}",
"raiseHandAction": "Levantar a mão",
"groupTitle": "Notificações"
},
"participantsPane": {
"close": "Fechar",
"headings": {
"lobby": "Sala de espera ({{count}})",
"participantsList": "Participantes da reunião ({{count}})"
},
"actions": {
"invite": "Convidar alguém",
"muteAll": "Silenciar todos",
"stopVideo": "Parar vídeo"
"participantsPane": {
"close": "Fechar",
"header": "Participantes",
"headings": {
"lobby": "Sala de espera ({{count}})",
"participantsList": "Participantes da reunião ({{count}})",
"waitingLobby": "Aguardando na sala de espera ({{count}})"
},
"actions": {
"allow": "Permitir aos participantes:",
"blockEveryoneMicCamera": "Bloquear microfone e câmera de todos",
"invite": "Convidar alguém",
"askUnmute": "Pedir para ativar som",
"mute": "Silenciar",
"muteAll": "Silenciar todos",
"muteEveryoneElse": "Silenciar todos os demais",
"startModeration": "Ativar som eles mesmos ou iniciar vídeo",
"stopEveryonesVideo": "Parar vídeo de todos",
"stopVideo": "Parar vídeo",
"unblockEveryoneMicCamera": "Desbloquear microfone e câmera de todos"
}
},
"passwordSetRemotely": "Definido por outro participante",
@@ -588,7 +664,8 @@
"lookGood": "Seu microfone está funcionando corretamente",
"or": "ou",
"premeeting": "Pré-reunião",
"showScreen": "Habiltar tela pré-reunião",
"showScreen": "Habilitar tela pré-reunião",
"keyboardShortcuts": "Habilitar atalhos de teclado",
"startWithPhone": "Iniciar com o áudio da ligação",
"screenSharingError": "Erro de compartilhamento de tela:",
"videoOnlyError": "Erro de vídeo:",
@@ -610,6 +687,7 @@
"ringing": "Tocando..."
},
"profile": {
"avatar": "avatar",
"setDisplayNameLabel": "Definir seu nome de exibição",
"setEmailInput": "Digite e-mail",
"setEmailLabel": "Definir seu e-mail de Gravatar",
@@ -624,12 +702,15 @@
"beta": "BETA",
"busy": "Estamos trabalhando para liberar recursos de gravação. Tente novamente em alguns minutos.",
"busyTitle": "Todas as gravações estão atualmente ocupadas",
"copyLink": "Copiar Link",
"error": "A gravação falhou. Tente novamente.",
"errorFetchingLink": "Erro ao buscar link da gravação.",
"expandedOff": "Gravação finalizada",
"expandedOn": "A reunião está sendo gravada.",
"expandedPending": "Iniciando gravação...",
"failedToStart": "Falha ao iniciar a gravação",
"fileSharingdescription": "Compartilhar gravação com participantes da reunião",
"linkGenerated": "Geramos um link para sua gravação.",
"live": "AOVIVO",
"loggedIn": "Conectado como {{userName}}",
"off": "Gravação parada",
@@ -639,11 +720,13 @@
"pending": "Preparando para gravar a reunião...",
"rec": "REC",
"serviceDescription": "Sua gravação será salva pelo serviço de gravação",
"serviceDescriptionCloud": "Gravação na nuvem",
"serviceName": "Serviço de gravação",
"signIn": "Entrar",
"signOut": "Sair",
"unavailable": "Oops! O {{serviceName}} está indisponível. Estamos trabalhando para resolver o problema. Por favor, tente mais tarde.",
"unavailableTitle": "Gravação indisponível"
"unavailableTitle": "Gravação indisponível",
"uploadToCloud": "Enviar para a nuvem"
},
"sectionList": {
"pullToRefresh": "Puxe para atualizar"
@@ -662,8 +745,13 @@
"signedIn": "Atualmente acessando eventos do calendário para {{email}}. Clique no botão Desconectar abaixo para parar de acessar os eventos da agenda.",
"title": "Calendário"
},
"desktopShareFramerate": "Taxa de quadros do compartilhamento de desktop",
"desktopShareWarning": "Você precisa reiniciar o compartilhamento de tela para que as novas configurações tenham efeito.",
"desktopShareHighFpsWarning": "Uma taxa de quadros mais alta para compartilhamento de desktop pode afetar sua largura de banda. Você precisa reiniciar o compartilhamento de tela para que as novas configurações tenham efeito.",
"devices": "Dispositivos",
"followMe": "Todos me seguem",
"framesPerSecond": "quadros por segundo",
"incomingMessage": "Mensagem recebida",
"language": "Idioma",
"loggedIn": "Conectado como {{name}}",
"microphones": "Microfones",
@@ -671,12 +759,18 @@
"more": "Mais",
"name": "Nome",
"noDevice": "Nenhum",
"participantJoined": "Participante Entrou",
"participantLeft": "Participante Saiu",
"playSounds": "Tocar sons",
"sameAsSystem": "Igual ao sistema ({{label}})",
"selectAudioOutput": "Saída de áudio",
"selectCamera": "Câmera",
"selectMic": "Microfone",
"sounds": "Sons",
"speakers": "Alto-faltantes",
"startAudioMuted": "Todos iniciam mudos",
"startVideoMuted": "Todos iniciam ocultos",
"talkWhileMuted": "Falar mesmo silenciado",
"title": "Configurações"
},
"settingsView": {
@@ -716,6 +810,7 @@
},
"startupoverlay": {
"policyText": " ",
"genericTitle": "A reunião precisa usar seu microfone e câmera.",
"title": "O {{app}} precisa usar seu microfone e câmera."
},
"suspendedoverlay": {
@@ -727,12 +822,14 @@
"accessibilityLabel": {
"audioOnly": "Alternar para apenas áudio",
"audioRoute": "Selecionar o dispositivo de som",
"boo": "Vaia",
"callQuality": "Gerenciar qualidade do vídeo",
"cc": "Alternar legendas",
"chat": "Alternar para janela de chat",
"clap": "Aplauso",
"document": "Alternar para documento compartilhado",
"download": "Baixe nossos aplicativos",
"embedMeeting": "Reunião em modo compacto",
"embedMeeting": "Reunião em formato compacto",
"feedback": "Deixar feedback",
"fullScreen": "Alternar para tela cheia",
"grantModerator": "Atribuir Moderador",
@@ -740,6 +837,8 @@
"help": "Ajuda",
"invite": "Convidar pessoas",
"kick": "Remover participante",
"laugh": "Risada",
"like": "Gostei",
"lobbyButton": "Habilitar/desabilitar sala de espera",
"localRecording": "Alternar controles de gravação local",
"lockRoom": "Ativar/desativar senha de reunião",
@@ -748,36 +847,51 @@
"moreOptions": "Mostrar mais opções",
"mute": "Alternar mudo do áudio",
"muteEveryone": "Silenciar todos",
"muteEveryoneElse": "Silenciar todos os demais",
"muteEveryonesVideo": "Desativar a câmera de todos",
"muteEveryoneElsesVideo": "Desativar a câmera de todos os demais",
"participants": "Participantes",
"party": "Festa",
"pip": "Alternar modo Picture-in-Picture",
"privateMessage": "Enviar mensagem privada",
"profile": "Editar seu perfil",
"raiseHand": "Alternar levantar a mão",
"reactionsMenu": "Abrir / fechar menu de reações",
"recording": "Alternar gravação",
"remoteMute": "Silenciar participante",
"remoteVideoMute": "Desativar a câmera do participante",
"security": "Opções de segurança",
"Settings": "Alternar configurações",
"shareaudio": "Compartilhar áudio",
"sharedvideo": "Alternar compartilhamento de vídeo do YouTube",
"shareRoom": "Convidar alguém",
"shareYourScreen": "Alternar compartilhamento de tela",
"shortcuts": "Alternar atalhos",
"show": "Mostrar no palco",
"speakerStats": "Alternar estatísticas do apresentador",
"surprised": "Surpresa",
"tileView": "Alternar visualização em blocos",
"toggleCamera": "Alternar câmera",
"toggleFilmstrip": "Alterar tira de filme",
"videomute": "Alternar mudo do vídeo",
"videoblur": "Alternar desfoque de vídeo"
"videoblur": "Alternar desfoque de vídeo",
"selectBackground": "Selecionar Fundo",
"expand": "Expandir",
"collapse": "Recolher"
},
"addPeople": "Adicionar pessoas à sua chamada",
"audioSettings": "Configurações de áudio",
"videoSettings": "Configurações de vídeo",
"audioOnlyOff": "Desabilitar modo de largura de banda baixa",
"audioOnlyOn": "Habilitar modo de largura de banda baixa",
"audioRoute": "Selecionar o dispositivo de som",
"authenticate": "Autenticar",
"boo": "Vaia",
"callQuality": "Gerenciar qualidade do vídeo",
"chat": "Abrir ou fechar o bate-papo",
"clap": "Aplauso",
"closeChat": "Fechar chat",
"closeReactionsMenu": "Fechar menu de reações",
"documentClose": "Fechar documento compartilhado",
"documentOpen": "Abrir documento compartilhado",
"download": "Baixe nossos aplicativos",
@@ -791,6 +905,8 @@
"hangup": "Sair",
"help": "Ajuda",
"invite": "Convidar pessoas",
"laugh": "Risada",
"like": "Gostei",
"lobbyButtonDisable": "Desabilitar sala de espera",
"lobbyButtonEnable": "Habilitar sala de espera",
"login": "Iniciar sessão",
@@ -800,6 +916,7 @@
"moreOptions": "Mais opções",
"mute": "Mudo / Não mudo",
"muteEveryone": "Silenciar todos",
"muteEveryonesVideo": "Desativar a câmera de todos",
"noAudioSignalTitle": "Não há entrada de áudio vindo do seu microfone!",
"noAudioSignalDesc": "Se você não o desativou propositalmente das configurações do sistema ou do hardware, considere trocar o dispositivo.",
"noAudioSignalDescSuggestion": "Se você não o desativou propositalmente das configurações do sistema ou do hardware, considere trocar para o dispositivo sugerido.",
@@ -808,28 +925,38 @@
"noisyAudioInputTitle": "O seu microfone parece estar barulhento!",
"noisyAudioInputDesc": "Parece que o microfone está fazendo barulho, considere silenciar ou alterar o dispositivo.",
"openChat": "Abrir chat",
"openReactionsMenu": "Abrir menu de reações",
"participants": "Participantes",
"party": "Festa",
"pip": "Entrar em modo Quadro-a-Quadro",
"privateMessage": "Enviar mensagem privada",
"profile": "Editar seu perfil",
"raiseHand": "Erguer / Baixar sua mão",
"raiseYourHand": "Levantar a mão",
"reactionBoo": "Enviar reação de vaia",
"reactionClap": "Enviar reação de aplauso",
"reactionLaugh": "Enviar reação de risada",
"reactionLike": "Enviar reação de gostei",
"reactionParty": "Enviar reação de festa",
"reactionSurprised": "Enviar reação de surpresa",
"security": "Opções de segurança",
"Settings": "Configurações",
"shareaudio": "Compartilhar áudio",
"sharedvideo": "Compartilhar um vídeo do YouTube",
"shareRoom": "Convidar alguém",
"shortcuts": "Ver atalhos",
"speakerStats": "Estatísticas do Apresentador",
"startScreenSharing": "Iniciar compart. de tela",
"startSubtitles": "Iniciar legendas",
"stopAudioSharing": "Parar compart. de áudio",
"stopScreenSharing": "Parar compart. de tela",
"stopSubtitles": "Parar legendas",
"stopSharedVideo": "Parar vídeo do YouTube",
"surprised": "Surpresa",
"talkWhileMutedPopup": "Tentando falar? Você está em mudo.",
"tileViewToggle": "Alternar visualização em blocos",
"toggleCamera": "Alternar câmera",
"videomute": "Iniciar ou parar a câmera",
"startvideoblur": "Desfocar meu plano de fundo",
"stopvideoblur": "Desativar desfoque de fundo",
"selectBackground": "Selecionar fundo"
},
"transcribing": {
@@ -856,6 +983,7 @@
"react-nativeGrantPermissions": "Selecione <b><i>Permitir</i></b> quando seu navegador perguntar pelas permissões.",
"safariGrantPermissions": "Selecione <b><i>OK</i></b> quando seu navegador perguntar pelas permissões."
},
"volumeSlider": "Controle de volume",
"videoSIPGW": {
"busy": "Estamos trabalhando para liberar recursos. Por favor, tente novamente em alguns minutos.",
"busyTitle": "O serviço da sala está ocupado",
@@ -878,26 +1006,29 @@
"ld": "LD",
"ldTooltip": "Ver vídeo em baixa definição",
"lowDefinition": "Baixa definição (LD)",
"onlyAudioAvailable": "Somente áudio disponível",
"onlyAudioSupported": "Suportamos somente áudio neste navegador.",
"sd": "SD",
"sdTooltip": "Ver vídeo em definição padrão",
"standardDefinition": "Definição padrão"
},
"videothumbnail": {
"connectionInfo": "Informações da Conexão",
"domute": "Mudo",
"domuteVideo": "Desativar a câmera",
"domuteOthers": "Silenciar todos os demais",
"domuteVideoOfOthers": "Desativar a câmera de todos os demais",
"flip": "Inverter",
"grantModerator": "Atribuir Moderador",
"kick": "Expulsar",
"kick": "Remover",
"moderator": "Moderador",
"mute": "Participante está mudo",
"muted": "Mudo",
"videoMuted": "Câmera desativada",
"remoteControl": "Controle remoto",
"show": "Mostrar no palco",
"videomute": "O participante parou a câmera"
},
"welcomepage": {
"addMeetingName": "Adicionar nome da reunião",
"accessibilityLabel": {
"join": "Toque para entrar",
"roomname": "Digite o nome da sala"
@@ -914,8 +1045,14 @@
"getHelp": "Obter ajuda",
"go": "IR",
"goSmall": "IR",
"join": "CRIAR / ENTRAR",
"headerTitle": "Jitsi Meet",
"headerSubtitle": "Reuniões com segurança e alta qualidade",
"info": "Informações",
"join": "CRIAR / ENTRAR",
"jitsiOnMobile": "Jitsi em dispositivos móveis baixe nossos aplicativos e inicie uma reunião em qualquer lugar",
"mobileDownLoadLinkIos": "Baixar aplicativo móvel para iOS",
"mobileDownLoadLinkAndroid": "Baixar aplicativo móvel para Android",
"mobileDownLoadLinkFDroid": "Baixar aplicativo móvel para F-Droid",
"moderatedMessage": "Ou <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">agende uma URL de reunião</a> antes, onde você é o único moderador.",
"privacy": "Política de Privacidade",
"recentList": "Recente",
@@ -926,27 +1063,38 @@
"roomname": "Digite o nome da sala",
"roomnameHint": "Digite o nome ou a URL da sala que você deseja entrar. Você pode digitar um nome, e apenas deixe para as pessoas que você quer se reunir digitem o mesmo nome.",
"sendFeedback": "Enviar comentários",
"startMeeting": "Iniciar reunião",
"terms": "Termos",
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas"
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas",
"logo": {
"calendar": "Logo do Calendário",
"microsoftLogo": "Logo da Microsoft",
"logoDeepLinking": "Logo do Jitsi Meet",
"desktopPreviewThumbnail": "Miniatura de Visualização do Desktop",
"googleLogo": "Logo do Google",
"policyLogo": "Logo da Política de Privacidade"
}
},
"lonelyMeetingExperience": {
"youAreAlone": "Você é o único na reunião",
"button": "Convidar outros"
"button": "Convidar outros",
"youAreAlone": "Você é o único na reunião"
},
"helpView": {
"header": "Centro de ajuda"
},
"lobby": {
"admit": "Aceitar",
"admitAll": "Aceitar todos",
"knockingParticipantList": "Remover lista de participantes",
"allow": "Permitir",
"backToKnockModeButton": "Sem senha, peça para se juntar",
"dialogTitle": "modo Lobby",
"disableDialogContent": "O modo Lobby está habilitado. Este recurso evita que particpantes não convidados juntem-se à sua conferência. Deseja desabilitar?",
"dialogTitle": "Modo sala de espera",
"disableDialogContent": "O modo sala de espera está habilitado. Este recurso evita que particpantes não convidados juntem-se à sua conferência. Deseja desabilitar?",
"disableDialogSubmit": "Desabilitar",
"emailField": "Informe seu email",
"enableDialogPasswordField": "Definir senha (opcional)",
"enableDialogSubmit": "Habilitar",
"enableDialogText": "O modo Lobby protege a sua conferência, permitindo a entrada de participantes apenas após a aprovação formal do moderador.",
"enableDialogText": "O modo sala de espera protege a sua conferência, permitindo a entrada de participantes apenas após a aprovação formal do moderador.",
"enterPasswordButton": "Informe a senha da conferência",
"enterPasswordTitle": "Informe a senha para se juntar à conferência",
"invalidPassword": "Senha inválida",
@@ -961,12 +1109,13 @@
"nameField": "Informe seu nome",
"notificationLobbyAccessDenied": "{{targetParticipantName}} foi rejeitado por {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} foi aceito por {{originParticipantName}}",
"notificationLobbyDisabled": "Sala de Espera foi desabilitada por {{originParticipantName}}",
"notificationLobbyEnabled": "Sala de Espera foi habilitada por {{originParticipantName}}",
"notificationLobbyDisabled": "Sala de espera foi desabilitada por {{originParticipantName}}",
"notificationLobbyEnabled": "Sala de espera foi habilitada por {{originParticipantName}}",
"notificationTitle": "Sala de espera",
"passwordField": "Informe a senha da conferência",
"passwordJoinButton": "Solicitar",
"reject": "Rejeitar",
"toggleLabel": "Habilitar lobby"
"rejectAll": "Rejeitar todos",
"toggleLabel": "Habilitar sala de espera"
}
}

View File

@@ -209,7 +209,6 @@
"e2eeLabel": "Aktivizo Fshehtëzim Skaj-më-Skaj",
"e2eeWarning": "KUJDES: Jo të gjithë pjesëmarrësit në këtë takim duket të kenë mbulim për fshehtëzim Skaj-më-Skaj. Në e aktivizofshi, ata sdo të jenë në gjendje tju shohin apo dëgjojnë.",
"enterDisplayName": "Ju lutemi, jepni këtu emrin tuaj",
"enterDisplayNameToJoin": "Që të merrni pjesë, ju lutemi, jepni emrin tuaj",
"embedMeeting": "Trupëzoni takim",
"error": "Gabim",
"gracefulShutdown": "Shërbimi ynë është aktualisht i ndërprerë, për punë mirëmbajtjeje. Ju lutemi, riprovoni më vonë.",

View File

@@ -1,3 +1,4 @@
{
"addPeople": {
"add": "Bjud in",
@@ -15,7 +16,26 @@
"searchPeople": "Sök efter personer",
"searchPeopleAndNumbers": "Sök efter personer eller lägg till deras telefonnummer",
"telephone": "Telefon: {{number}}",
"title": "Bjud in andra till mötet"
"title": "Bjud in andra till mötet",
"addContacts": "Bjud in dina kontakter",
"copyInvite": "Kopiera mötesinbjudan",
"copyLink": "Kopiera möteslänk",
"copyStream": "Kopiera livestreamlänk",
"contacts": "Kontakter",
"defaultEmail": "Din mailadress",
"googleEmail": "Google e-mail",
"inviteMoreHeader": "Du är enda deltagaren i mötet",
"inviteMoreMailSubject": "Anslut till {{appName}} möte",
"inviteMorePrompt": "Bjud in fler personer",
"linkCopied": "Länk kopierad till utklipp",
"outlookEmail": "Outlook e-mail",
"phoneNumbers": "telefonnummer",
"searching": "Söker....",
"shareInvite": "Dela mötes inbjudan",
"shareLink": "Dela mötes inbjudan för att bjuda in fler",
"shareStream": "Dela livestreamlänken",
"sipAddresses": "sip-adress",
"yahooEmail": "Yahoo e-mail"
},
"audioDevices": {
"bluetooth": "Bluetooth",
@@ -57,10 +77,19 @@
"privateNotice": "Privat meddelande till {{recipient}}",
"noMessagesMessage": "Det finns ännu inga meddelanden i mötet. Påbörja en konversation!",
"messageTo": "Privat meddelande till {{recipient}}",
"fieldPlaceHolder": "Skriv ditt meddelande här"
"fieldPlaceHolder": "Skriv ditt meddelande här",
"enter": "Delta i mötet",
"message": "Meddelande",
"messageAccessibleTitle": "{{user}} Säger:",
"messageAccessibleTitleMe": "Jag säger: ",
"smileysPanel": "Emoji panel",
"tabs": {
"chat": "Chat",
"polls": "Omröstningar"
}
},
"connectingOverlay": {
"joiningRoom": "Ansluter till mötet"
"joiningRoom": "Ansluter till mötet..."
},
"connection": {
"ATTACHED": "Ansluten",
@@ -72,11 +101,11 @@
"DISCONNECTED": "Frånkopplad",
"DISCONNECTING": "Kopplar från",
"ERROR": "Fel",
"RECONNECTING": "Ett nätverksproblem uppstod. Återansluter",
"RECONNECTING": "Ett nätverksproblem uppstod. Återansluter...",
"LOW_BANDWIDTH": "Video för {{displayName}} har stängts av för att spara bandbredd",
"GOT_SESSION_ID": "Hämta sessions-id ... Klart",
"GET_SESSION_ID_ERROR": "Hämta sessions-id-fel: {{code}}",
"FETCH_SESSION_ID": "Hämtar sessions-id "
"FETCH_SESSION_ID": "Hämtar sessions-id ..."
},
"connectionindicator": {
"address": "Adress:",
@@ -108,7 +137,13 @@
"transport": "Transport:",
"transport_plural": "Transporter:",
"turn": " (turn)",
"e2e_rtt": "E2E RTT:"
"e2e_rtt": "E2E RTT:",
"audio_ssrc": "Ljud SSRC:",
"codecs": "Codecs (A/V):",
"maxEnabledResolution": "Sänd maxiamlt",
"savelogs": "Spara loggar",
"participant_id": "Deltagar id:",
"video_ssrc": "Video SSRC:"
},
"dateUtils": {
"earlier": "Tidigare",
@@ -122,8 +157,11 @@
"downloadApp": "Hämta appen",
"launchWebButton": "Starta på webben",
"openApp": "Fortsätt till appen",
"title": "Startar ditt möte i {{app}} ",
"tryAgainButton": "Försök igen på skrivbordet"
"title": "Startar ditt möte i {{app}} ...",
"tryAgainButton": "Försök igen på skrivbordet",
"ifDoNotHaveApp": "Om du inte har appen än:",
"ifHaveApp": "Om du redan har appen:",
"joinInApp": "Delta i denna möte med din app"
},
"defaultLink": "t ex. {{url}}",
"deviceError": {
@@ -156,9 +194,9 @@
"cameraUnsupportedResolutionError": "Din kamera stöder inte den krävda videoupplösningen.",
"Cancel": "Avbryt",
"close": "Stäng",
"conferenceDisconnectMsg": "Kolla din internetanslutning. Återansluter om {{seconds}} sekunder",
"conferenceDisconnectMsg": "Kolla din internetanslutning. Återansluter om {{seconds}} sekunder...",
"conferenceDisconnectTitle": "Du har kopplats ner.",
"conferenceReloadMsg": "Vi försöker fixa problemet. Återansluter om {{seconds}} sekunder",
"conferenceReloadMsg": "Vi försöker fixa problemet. Återansluter om {{seconds}} sekunder...",
"conferenceReloadTitle": "Något gick snett.",
"confirm": "Bekräfta",
"confirmNo": "Nej",
@@ -197,11 +235,11 @@
"lockTitle": "Låsning misslyckades",
"logoutQuestion": "Är du säker på att du vill logga ut och stoppa konferensen?",
"logoutTitle": "Logga ut",
"maxUsersLimitReached": "",
"maxUsersLimitReached": "Gränsen för maximalt antal deltagare har nåtts. Konferensen är full. Kontakta mötesägaren eller försök igen senare!",
"maxUsersLimitReachedTitle": "Maximal deltagarantal uppnått",
"micConstraintFailedError": "Din mikrofon uppfyller inte kraven för användning.",
"micNotFoundError": "Hittar ingen mikrofon.",
"micNotSendingData": "",
"micNotSendingData": "Gå till datorns inställningar för att stänga av mikrofonen och justera dess nivå",
"micNotSendingDataTitle": "Din mikrofon är tystad av dina systeminställningar",
"micPermissionDeniedError": "Du har inte tillåtit användning av din mikrofon. Du kan gå med i mötet men de andra kan då inte höra dej. Om du vill tillåta användning av din mikrofon gör du det via mikrofonknappen i URL-fältet.",
"micUnknownError": "Av okänd anledning kan inte din mikrofon användas.",
@@ -209,7 +247,7 @@
"muteParticipantButton": "Tysta",
"muteParticipantDialog": "Vill du tysta den här deltagaren? Du kan inte aktivera mikrofonen igen, men deltagaren kan när som helst göra det själv.",
"muteParticipantTitle": "Tysta deltagaren?",
"Ok": "Ok",
"Ok": "OK",
"passwordLabel": "Mötet har låsts av en deltagare. Ange $t(lockRoomPassword) för att gå med.",
"passwordNotSupported": "Att sätta ett $t(lockRoomPassword) för mötesrummet stöds ej.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) stöds inte",
@@ -265,7 +303,7 @@
"userPassword": "användarlösenord",
"WaitForHostMsg": "Konferensen <b>{{room}}</b> har inte börjat än. Autentisera konferensen om du är värd. Vänta annars på att värden startar konferensen.",
"WaitForHostMsgWOk": "Konferensen <b>{{room}}</b> har inte börjat än. Om du är värd, autentisera konferensen genom att trycka på Ok. Vänta annars på att värden startar konferensen.",
"WaitingForHost": "Väntar på värden ",
"WaitingForHost": "Väntar på värden ...",
"Yes": "Ja",
"yourEntireScreen": "Helskärm",
"muteEveryoneElseDialog": "När någon tystats kan du inte slå på mikrofonen, men de kan själva slå på sin egen mikrofon när som helst.",
@@ -274,15 +312,93 @@
"muteEveryoneStartMuted": "Alla börjar tystade",
"muteEveryoneTitle": "Tysta alla?",
"sendPrivateMessage": "Du har fått ett privat meddelande. Tänkte du svara på det privat, eller vill du skicka ditt meddelande till alla deltagare?",
"screenSharingAudio": "",
"screenSharingAudio": "Dela ljud",
"sendPrivateMessageCancel": "Skicka till alla deltagare",
"sendPrivateMessageTitle": "",
"sendPrivateMessageOk": ""
"sendPrivateMessageTitle": "Skicka privat?",
"sendPrivateMessageOk": "Skicka privat",
"add": "Lägg till",
"authenticationRequired": "Autentisering krävs",
"cameraTimeoutError": "Tiden är ute, kunde ej starta video. ",
"copied": "Kopierad",
"e2eeDescription": "???",
"e2eeLabel": "Aktivera \"end-to-end\" kryptering",
"e2eeWarning": "Varning, alla deltagare i mötet har ej stöd för \"end-to-end\" kryptering",
"embedMeeting": "Bädda in möte",
"grantModeratorDialog": "Är du säker du vill göra denna deltagare till en moderator?",
"grantModeratorTitle": "Godkänn moderator",
"hideShareAudioHelper": "Visa inte denna dialog igen ",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Ej möjligt medan inspelning pågår",
"login": "Logga in",
"micTimeoutError": "Time out, kunde ej starta ljud enhet",
"muteEveryoneElsesVideoDialog": "När kameran är inaktiverad kan den inte aktiveras igen. Däremot kan övriga deltagare aktivera sina kameror.",
"muteEveryoneElsesVideoTitle": "Inaktivera allas kameror förutom {{whom}}",
"muteEveryonesVideoDialog": "Är du säker du vill inaktivera allas kameror. Du kommer inte att kunna aktivera dessa igen. Däremot kommer deltagarna att kunna aktivera sin egen kamera när som.",
"muteEveryonesVideoDialogOk": "Inkativera",
"muteEveryonesVideoTitle": "Inaktiveras allas kameror",
"muteEveryoneSelf": "Dig själv",
"muteParticipantsVideoDialog": "Är du säker du vill inaktivera denna deltagares kamera. Du kommer inte att kunna aktivera den igen. Däremot kan deltagaren kunna aktivera sin egen kamera när som.",
"muteParticipantsVideoButton": "Inkativera kamera",
"muteParticipantsVideoTitle": "Inaktivera denna deltagares kamera?",
"muteParticipantsVideoBody": "Du kommer inte att kunna aktivera kameran igen. Däremot kan deltagaren kunna aktivera sin egen kamera när som.",
"noDropboxToken": "Ingen giltig dropbox tecken",
"password": "Lösenord",
"permissionErrorTitle": "Tillåtelse krävs",
"permissionCameraRequiredError": "Tillåtelese krävs för att delta med kamera i denna möte. Var god skaffa detta i \"inställningar\".",
"permissionMicRequiredError": "Tillåtelese krävs för att delta med mikrofon i denna möte. Var god skaffa detta i \"inställningar\".",
"readMore": "Mer",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Ej möjligt medan live streaming pågår.",
"screenSharingFailed": "Oops! Något gick fel, skärmdelning kunde ej startas.",
"screenSharingFailedTitle": "Skärmdelning misslyckades!",
"sessionRestarted": "Samtal återstartat av bryggan",
"shareAudio": "Forstätt",
"shareAudioTitle": "Hur man delar ljud",
"shareAudioWarningTitle": "Du måste avsluta skärmdelning innan du kan dela ljud",
"shareAudioWarningH1": "Om du bara vill dela ljud:",
"shareAudioWarningD1": "Du måste avsluta din skärmdelning innan du kan dela ditt ljud",
"shareAudioWarningD2": "Du måste starta om din skärmdelning och därefter klicka på \"ljuddelning\"",
"shareMediaWarningGenericH2": "Om du vill dela din bild och ljud",
"shareScreenWarningTitle": "Du måste avsluta ljuddelning innan du kan dela in skärm",
"shareScreenWarningH1": "Om du bara vill dela din skärm:",
"shareScreenWarningD1": "du måste avsluta ljuddelning innan du aktiverar skärmdelning",
"shareScreenWarningD2": "du måste avsluta ljuddelning, starta skärmdelning och sen aktivera \"ljuddelning\"",
"user": "Användare",
"userIdentifier": "Användar indentifierare",
"videoLink": "Videolänk",
"viewUpgradeOptions": "Se uppgraderings alternativ",
"viewUpgradeOptionsContent": "För att få obegränsad tillgång till premiumfunktioner som inspelning, transkriptioner, RTMP -streaming och mer måste du uppgradera din plan.",
"viewUpgradeOptionsTitle": "Du upptäckte en premiumfunktion!",
"WaitingForHostTitle": "Väntar på värden ...",
"remoteUserControls": "Fjärranvändarkontroller av {{användarnamn}}",
"localUserControls": "Lokala användarkontroller"
},
"dialOut": {
"statusMessage": "är nu {{status}}"
},
"virtualBackground": {
"apply": "Tillämpa",
"title": "Virtuella bakgrunder",
"blur": "Oskärpa",
"slightBlur": "Lätt oskärpa",
"removeBackground": "Ta bort bakgrunden",
"addBackground": "Lägg till bakgrund",
"pleaseWait": "Vänligen vänta...",
"none": "Ingen",
"uploadedImage": "Uppladdad bild {{index}}",
"deleteImage": "Ta bort bild",
"image1": "Strand",
"image2": "Vit neutral bakgrund",
"image3": "Vitt tomt rum",
"image4": "Svart golvlampa",
"image5": "Berg",
"image6": "Skog",
"image7": "Soluppgång",
"desktopShareError": "Det gick inte att dela skrivbordet",
"desktopShare": "Dela skrivbord",
"webAssemblyWarning": "WebAssembly stöds inte",
"backgroundEffectError": "Det gick inte att tillämpa bakgrundseffekt."
},
"feedback": {
"star": "Stjärna",
"average": "Medel",
"bad": "Dåligt",
"detailsLabel": "Berätta mer.",
@@ -313,9 +429,9 @@
"genericError": "Oj då, något gick fel.",
"inviteLiveStream": "Om du vill se livesändningen av mötet klickar du här: {{url}}",
"invitePhone": "För att gå med via telefon istället trycker du in: {{number}} ,, {{conferenceID}} #\n",
"invitePhoneAlternatives": "",
"invitePhoneAlternatives": "Letar du efter ett annat uppringningsnummer?\nSe mötesuppringningsnummer: {{url}}\n\n\nOm du också ringer in via en rumstelefon går du med utan att ansluta till ljud: {{silentUrl}}",
"inviteURLFirstPartGeneral": "Du är inbjuden till ett möte.",
"inviteURLFirstPartPersonal": "",
"inviteURLFirstPartPersonal": "{{name}} bjuder in dig till ett möte.\n",
"inviteURLSecondPart": "\nGå med i mötet:\n{{url}}\n",
"liveStreamURL": "Livesändning:",
"moreNumbers": "Fler nummer",
@@ -326,7 +442,14 @@
"password": "$t(lockRoomPasswordUppercase):",
"title": "Dela",
"tooltip": "Dela länk och information om inringning för mötet",
"label": "Mötesinformation"
"label": "Mötesinformation",
"copyNumber": "Kopiera nummer",
"inviteSipEndpoint": "Om du ansluta med SIP -adressen anger du följande: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} bjuder in dig till ett möte.",
"inviteTextiOSJoinSilent": "Om du ringer in via en rumstelefon använder du den här länken för att ansluta utan ljud: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "Klicka på följande länk för att gå med: {{inviteUrl}}.",
"inviteTextiOSPhone": "Om du vill gå med via telefon använder du det här numret: {{number}} ,, {{conferenceID}}#. Om du letar efter ett annat nummer är detta hela listan: {{didUrl}}.",
"sip": "SIP adress"
},
"inviteDialog": {
"alertText": "Det gick inte att bjuda in alla deltagare.",
@@ -357,7 +480,7 @@
"toggleScreensharing": "Växla mellan kamera och skärmdelning",
"toggleShortcuts": "Visa eller dölj kortkommandon",
"videoMute": "Aktivera / avaktivera din kamera",
"videoQuality": ""
"toggleParticipantsPane": "Visa eller dölj deltagarfönstret"
},
"liveStreaming": {
"busy": "Vi försöker frigöra fler strömningsresurser. Försök igen senare.",
@@ -371,13 +494,13 @@
"errorLiveStreamNotEnabled": "Livesändning är otillgänglig för {{email}}. Aktivera livesändning eller logga in på ett konto där det är aktiverat.",
"expandedOff": "Livesändningen har avslutats",
"expandedOn": "Mötet livesänds just nu på YouTube.",
"expandedPending": "Livesändningen startas ",
"expandedPending": "Livesändningen startas ...",
"failedToStart": "Strömningen kunde inte påbörjas",
"getStreamKeyManually": "Vi kunde inte hämta några direktströmmar. Försök att få din direktströmningsnyckel från YouTube.",
"invalidStreamKey": "Livesändningslösenordet kan vara felaktigt.",
"off": "Strömning avslutad",
"on": "Strömma",
"pending": "Börja strömma ",
"pending": "Börja strömma ...",
"serviceName": "Livesändningstjänst",
"signedInAs": "Du är nu inloggad som:",
"signIn": "Logga in med Google",
@@ -389,7 +512,9 @@
"offBy": "{{name}} stoppade direktströmningen",
"onBy": "{{name}} startade direktströmningen",
"youtubeTerms": "Tjänstevillkor för YouTube",
"googlePrivacyPolicy": ""
"googlePrivacyPolicy": "Googles sekretesspolicy",
"limitNotificationDescriptionWeb": "På grund av stor efterfrågan kommer din strömning att begränsas till {{limit}} min. För obegränsad strömning, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Din strömning är begränsad till {{limit}} min. För obegränsad strömning, prova {{app}}."
},
"localRecording": {
"clientState": {
@@ -439,7 +564,7 @@
"moderator": "Moderatorsrättigheter tilldelades!",
"muted": "Du har startat konversationen utan mikrofon.",
"mutedTitle": "Du har mikrofonen avstängd!",
"mutedRemotelyTitle": "",
"mutedRemotelyTitle": "Din mikrofonen har blivit avstängd av {{participantDisplayName}}!",
"mutedRemotelyDescription": "Du kan alltid slå på mikrofonen när du är redo att tala. Stäng av när du är klar för att hålla brus borta från mötet.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) togs bort av en annan deltagare",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) satt av en annan deltagare",
@@ -447,36 +572,118 @@
"somebody": "Någon",
"startSilentTitle": "Du gick med utan ljud aktiverat!",
"startSilentDescription": "Anslut till mötet igen för att aktivera ljud",
"suboptimalExperienceDescription": "Hmm din upplevelse med {{appName}} kommer inte att bli särskilt bra. Vi försöker hitta sätt att förbättra det, men till dess använd en av <a href='{{recommendedBrowserPageLink}}' target='_blank'>de helt stödda webbläsarna</a>.",
"suboptimalExperienceDescription": "Hmm... din upplevelse med {{appName}} kommer inte att bli särskilt bra. Vi försöker hitta sätt att förbättra det, men till dess använd en av <a href='{{recommendedBrowserPageLink}}' target='_blank'>de helt stödda webbläsarna</a>.",
"suboptimalExperienceTitle": "Webbläsarvarning",
"unmute": "Slå på mikrofonen",
"newDeviceCameraTitle": "Ny kamera hittad",
"newDeviceAudioTitle": "Ny ljudenhet hittad",
"newDeviceAction": "Använd",
"suboptimalBrowserWarning": "Din mötesupplevelse kommer tyvärr inte att bli så bra. Vi letar efter sätt att förbättra detta, men fram till dess kan du försöka använda en av de <a href='{{recommendedBrowserPageLink}}' target='_blank'> fullt stödda webbläsarna </a>."
"suboptimalBrowserWarning": "Din mötesupplevelse kommer tyvärr inte att bli så bra. Vi letar efter sätt att förbättra detta, men fram till dess kan du försöka använda en av de <a href='{{recommendedBrowserPageLink}}' target='_blank'> fullt stödda webbläsarna </a>.",
"hostAskedUnmute": "Värden vill att du ska stänga av ljudet",
"videoMutedRemotelyTitle": "Din kamera har inaktiverats av {{participantDisplayName}}!",
"videoMutedRemotelyDescription": "Du kan alltid slå på den igen.",
"screenShareNoAudio": "\"Dela ljudrutan\" aktiverades inte i fönstret för val av fönster.",
"screenShareNoAudioTitle": "Det gick inte att dela systemljud!",
"OldElectronAPPTitle": "Säkerhetsproblem!",
"oldElectronClientDescription1": "Den version av Jitis meet som används är gammal och har säkerhetsluckor. Var god uppdatera till den senaste versionen.",
"oldElectronClientDescription2": "senast build",
"oldElectronClientDescription3": "nu!",
"moderationInEffectDescription": "Räck upp handen om du vill tala",
"moderationInEffectCSDescription": "Räck upp handen om du vill dela din video",
"moderationInEffectVideoDescription": "Räck upp handen om du vill att din video ska synas",
"moderationInEffectTitle": "Mikrofonen är avstängd av moderatorn",
"moderationInEffectCSTitle": "Innehållsdelning är inaktiverat av moderator",
"moderationInEffectVideoTitle": "Videon stängs av av moderatorn",
"moderationRequestFromModerator": "Värden vill att du ska aktivera ditt ljudet",
"moderationRequestFromParticipant": "Vill prata",
"moderationStartedTitle": "Moderering startad",
"moderationStoppedTitle": "Moderering stoppad",
"moderationToggleDescription": "av {{participantDisplayName}}",
"raiseHandAction": "Räck upp handen",
"reactionSounds": "Inaktivera ljud",
"groupTitle": "Notifieringar"
},
"passwordSetRemotely": "satt av en annan deltagare",
"passwordDigitsOnly": "",
"passwordDigitsOnly": "Ange max {{number}} siffror",
"poweredby": "drivs med",
"prejoin": {
"audioAndVideoError": "Ljud- och videofel:",
"audioDeviceProblem": "Det finns ett problem med din ljudenhet",
"audioOnlyError": "Ljudfel:",
"audioTrackError": "Det gick inte att skapa ljudspår.",
"calling": "Ringer",
"callMe": "Ring mig",
"callMeAtNumber": "Ring mig på det här numret:",
"configuringDevices": "Konfigurerar enheter...",
"connectedWithAudioQ": "Är din mikrofon ansluten?",
"connection": {
"good": "Din internetanslutning fungerar bra!",
"nonOptimal": "Din internetanslutning är inte optimal",
"poor": "Din internetanslutning fungerar dåligt"
},
"connectionDetails": {
"audioClipping": "Ditt ljud kan upplevas hackigt.",
"audioHighQuality": "Vi förväntar oss att ditt ljud har utmärkt kvalitet.",
"audioLowNoVideo": "Vi förväntar oss att din ljudkvalitet är låg och ingen video.",
"goodQuality": "Grymt bra! Din mediekvalitet kommer att bli bra.",
"noMediaConnectivity": "Vi kunde inte hitta ett sätt att upprätta mediaanslutning för detta test. Detta orsakas vanligtvis av en brandvägg eller NAT.",
"noVideo": "Vi förväntar oss att din video kommer ha låg kvalitet eller inte fungera.",
"undetectable": "Om du fortfarande inte kan ringa i webbläsaren rekommenderar vi att du ser till att dina högtalare, mikrofon och kamera är korrekt inställda, att du har beviljat din webbläsare rättigheter att använda din mikrofon och kamera och att din webbläsarversion är uppdaterad.",
"veryPoorConnection": "Vi förväntar oss att din samtalskvalitet är riktigt dålig.",
"videoFreezing": "Vi förväntar oss att din video fryser, blir svart och pixeleras.",
"videoHighQuality": "Vi förväntar oss att din video har bra kvalitet.",
"videoLowQuality": "Vi förväntar oss att din video har låg kvalitet när det gäller bildhastighet och upplösning.",
"videoTearing": "Vi förväntar oss att din video ska vara pixelerad eller ha visuella artefakter."
},
"copyAndShare": "Kopiera och dela möteslänk",
"dialInMeeting": "Ring in till mötet",
"dialInPin": "Ring in till mötet och ange PIN-kod:",
"dialing": "Ringer",
"doNotShow": "Visa inte denna ruta igen",
"errorDialOut": "Kunde inte ringa ut",
"errorDialOutDisconnected": "Kunde inte ringa ut. Kopplar ner",
"errorDialOutFailed": "Kunde inte ringa ut. Samtal misslyckades",
"errorDialOutStatus": "Kunde inte hämta status på utgående samtal",
"errorMissingName": "Ange ditt namn för att ansluta till mötet",
"errorStatusCode": "Kunde inte ringa ut, statuskod: {{status}}",
"errorValidation": "Ogiltigt nummer",
"iWantToDialIn": "Jag vill ringa in",
"joinAudioByPhone": "Anslut med ljud via telefon",
"joinMeeting": "Anslut till mötet",
"joinWithoutAudio": "Anslut utan ljud",
"initiated": "Samtalet påbörjades",
"linkCopied": "Länken kopierades till urklipp",
"lookGood": "Din mikrofon fungerar som den ska",
"or": "eller",
"premeeting": "Förmöte",
"showScreen": "Aktivera skärmen före mötet",
"keyboardShortcuts": "Aktivera kortkommandon",
"startWithPhone": "Börja med telefonljud",
"screenSharingError": "Skärmdelningsfel:",
"videoOnlyError": "Videofel:",
"videoTrackError": "Det gick inte att skapa videospår.",
"viewAllNumbers": "visa alla nummer"
},
"presenceStatus": {
"busy": "Upptagen",
"calling": "Ringer",
"calling": "Ringer...",
"connected": "Ansluten",
"connecting": "Ansluter",
"connecting2": "Ansluter*",
"connecting": "Ansluter...",
"connecting2": "Ansluter*...",
"disconnected": "Frånkopplad",
"expired": "Utgången",
"ignored": "Ignorerad",
"initializingCall": "Startar samtal",
"initializingCall": "Startar samtal...",
"invited": "Inbjuden",
"rejected": "Avvisad",
"ringing": "Ringer"
"ringing": "Ringer..."
},
"profile": {
"setDisplayNameLabel": "Ange ditt visningsnamn",
"setEmailInput": "Skriv e-postadress",
"setEmailLabel": "Ange din gravatar-e-postadress",
"title": "Profil"
"title": "Profil",
"avatar": "avatar"
},
"recording": {
"authDropboxText": "Ladda upp till Dropbox",
@@ -487,14 +694,14 @@
"error": "Inspelningen misslyckades. Försök igen.",
"expandedOff": "Inspelningen har avslutats",
"expandedOn": "Mötet spelas nu in.",
"expandedPending": "Inspelningen påbörjas",
"expandedPending": "Inspelningen påbörjas...",
"failedToStart": "Inspelningen kunde inte påbörjas",
"fileSharingdescription": "Dela inspelningen med mötesdeltagare",
"live": "LIVE",
"loggedIn": "Inloggad som {{userName}}",
"off": "Inspelningen avslutades",
"on": "Inspelning",
"pending": "Förbereder inspelning av mötet",
"pending": "Förbereder inspelning av mötet...",
"rec": "REC",
"serviceDescription": "Din inspelning kommer att sparas av inspelningstjänsten",
"serviceName": "Inspelningstjänst",
@@ -503,7 +710,14 @@
"unavailable": "{{serviceName}} är inte tillgänglig. Vi försöker åtgärda felet. Försök igen senare.",
"unavailableTitle": "Inspelning kan inte göras",
"onBy": "{{name}} påbörjade inspelningen",
"offBy": "{{name}} avslutade inspelningen"
"offBy": "{{name}} avslutade inspelningen",
"limitNotificationDescriptionWeb": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, försök <3>{{app}}</3>.",
"copyLink": "Kopiera länk",
"errorFetchingLink": "Fel vid hämtning av inspelningslänk.",
"linkGenerated": "Vi har genererat en länk till din inspelning.",
"serviceDescriptionCloud": "Molninspelning",
"uploadToCloud": "Ladda upp till molnet"
},
"sectionList": {
"pullToRefresh": "Dra för att uppdatera"
@@ -517,7 +731,7 @@
"title": "Kalender"
},
"devices": "Enheter",
"followMe": "Alla följer mej",
"followMe": "Alla följer mig",
"language": "Språk",
"loggedIn": "Inloggad som {{name}}",
"moderator": "Moderator",
@@ -531,7 +745,19 @@
"startVideoMuted": "Alla börjar osynliga",
"title": "Inställningar",
"speakers": "Högtalare",
"microphones": "Mikrofoner"
"microphones": "Mikrofoner",
"desktopShareFramerate": "Bildfrekvens för skrivbordsdelning",
"desktopShareWarning": "Du måste starta om skärmdelningen för att de nya inställningarna ska träda i kraft.",
"desktopShareHighFpsWarning": "En högre bildhastighet för skrivbordsdelning kan påverka din bandbredd. Du måste starta om skärmdelningen för att de nya inställningarna ska träda i kraft.",
"framesPerSecond": "bildrutor per sekund",
"incomingMessage": "Inkommande meddelande",
"participantJoined": "Deltagare ansluten",
"participantLeft": "Deltagare lämnat mötet",
"playSounds": "Spelljud på",
"reactions": "Reaktioner",
"sameAsSystem": "Samma som system ({{label}})",
"sounds": "Ljud",
"talkWhileMuted": "Prata medan din ljud är inaktiverad"
},
"settingsView": {
"alertOk": "OK",
@@ -549,8 +775,11 @@
"version": "Version",
"disableCallIntegration": "Tillåt inte deltagande via telefon",
"showAdvanced": "Visa avancerade inställningar",
"disableP2P": "",
"advanced": "Avancerat"
"disableP2P": "Inaktivera Dator-till-dator-läge",
"advanced": "Avancerat",
"alertCancel": "Avbryt",
"disableCrashReporting": "Inaktivera kraschrapportering",
"disableCrashReportingWarning": "Är du säker på att du vill inaktivera kraschrapportering? Inställningen tillämpas när du startar om appen."
},
"share": {
"dialInfoText": "\n\n=====\n\nVill du istället ringa in via telefon?\n\n{{defaultDialInNumber}} Klicka på den här länken för att se telefonnumret för detta möte\n{{dialInfoPageUrl}}",
@@ -563,11 +792,13 @@
"name": "Namn",
"seconds": "{{count}} s",
"speakerStats": "Talarstatistik",
"speakerTime": "Talartid"
"speakerTime": "Talartid",
"search": "Sök"
},
"startupoverlay": {
"policyText": " ",
"title": "{{app}} vill använda din kamera och mikrofon."
"title": "{{app}} vill använda din kamera och mikrofon.",
"genericTitle": "Mötet måste använda din mikrofon och kamera."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Gå med igen",
@@ -578,7 +809,7 @@
"accessibilityLabel": {
"audioOnly": "Slå av eller på ljudet",
"audioRoute": "Välj ljudenhet",
"callQuality": "",
"callQuality": "Hantera videokvalitet",
"cc": "Slå av eller på undertexter",
"chat": "Öppna eller stäng chattfönster",
"document": "Öppna eller stäng delat dokument",
@@ -602,18 +833,38 @@
"shareRoom": "Bjud in någon",
"shareYourScreen": "Slå av eller på skärmdelning",
"shortcuts": "Stäng eller öppna genvägar",
"show": "",
"show": "Visa på scenen",
"speakerStats": "Stäng eller öppna talarstatistik",
"tileView": "Öppna eller stäng panelvyn",
"toggleCamera": "Växla kamera",
"videomute": "Sätt på eller stäng av mikrofonen",
"videoblur": "",
"videoblur": "Växla videooskärpa",
"muteEveryone": "Tysta alla",
"toggleFilmstrip": "",
"privateMessage": "",
"toggleFilmstrip": "Växla filmremsa",
"privateMessage": "Skicka privat meddelande",
"moreOptions": "Visa fler alternativ",
"help": "Hjälp",
"download": ""
"download": "Ladda ner app",
"boo": "Bua",
"clap": "Klappa",
"embedMeeting": "Bädda in möte",
"grantModerator": "Godkänn moderator",
"laugh": "Skratta",
"like": "Tummen upp",
"lobbyButton": "Aktivera/inaktivera väntrumsläge",
"muteEveryoneElse": "Inkativerad ljud för alla andra",
"muteEveryonesVideo": "Inkommande medelande",
"muteEveryoneElsesVideo": "Inaktivera alla andras kameror",
"participants": "Deltagare",
"reactionsMenu": "Öppna7ständ meny för reaktioner",
"remoteVideoMute": "Inaktivera kamera för deltagare",
"security": "Säkerhetsalternativ",
"shareaudio": "Dela ljud",
"silence": "Tyst läge",
"surprised": "Överaskning",
"selectBackground": "Välj bakgrund",
"expand": "Expandera",
"collapse": "Kollaps"
},
"addPeople": "Lägg till personer i samtal",
"audioOnlyOff": "Avsluta ljudläget",
@@ -662,14 +913,41 @@
"noAudioSignalTitle": "Det kommer inget ljud från din mikrofon!",
"muteEveryone": "Tysta alla",
"privateMessage": "Skicka privat meddelande",
"noisyAudioInputTitle": "",
"noAudioSignalDialInLinkDesc": "",
"noAudioSignalDialInDesc": "",
"noAudioSignalDescSuggestion": "",
"noAudioSignalDesc": "",
"moreOptions": "",
"help": "",
"download": ""
"noisyAudioInputTitle": "Din mikrofon verkar vara bullrig!",
"noAudioSignalDialInDesc": "Du kan också ringa in med:",
"noAudioSignalDialInLinkDesc": "Uppringningsnummer",
"noAudioSignalDescSuggestion": "Om du inte avsiktligt tystade det från systeminställningar eller hårdvara, överväg att byta till den föreslagna enheten.",
"noAudioSignalDesc": "Om du inte avsiktligt stängde av det från systeminställningar eller hårdvara, överväg att byta enhet.",
"moreOptions": "Visa fler alternativ",
"help": "Hjälp",
"download": "Ladda ner vår app",
"audioSettings": "Ljud inställningar",
"videoSettings": "Video inställningar",
"boo": "Bua",
"clap": "Klappa",
"closeReactionsMenu": "Stäng meny för reaktioner",
"disableReactionSounds": "Du kan inaktivera reaktionsljud för det här mötet",
"e2ee": "End-to-End kryptering",
"embedMeeting": "Bädda in möte",
"laugh": "Skratta",
"like": "Tummen upp",
"lobbyButtonDisable": "Inaktivera väntrumsläge",
"lobbyButtonEnable": "Aktivera väntrumsläge",
"muteEveryonesVideo": "Inaktivera allas kamera",
"openReactionsMenu": "Öppna meny för reaktioner",
"participants": "Deltagare",
"reactionBoo": "Bua",
"reactionClap": "Klappa",
"reactionLaugh": "Skratta",
"reactionLike": "Skicka tummen upp",
"reactionSilence": "Skicka tyst reaktion",
"reactionSurprised": "Skicka reaktionen överaskad",
"security": "Säkerhetsalternativ",
"shareaudio": "Dela ljud",
"silence": "Tystnad",
"stopAudioSharing": "Inaktivera ljuddelning",
"surprised": "Överaskad",
"selectBackground": "Välj bakgrund"
},
"transcribing": {
"ccButtonTooltip": "Starta / Avsluta undertexter",
@@ -678,7 +956,7 @@
"failedToStart": "Det gick inte att starta transkribering",
"labelToolTip": "Mötet transkriberas",
"off": "Transkribering avslutades",
"pending": "Förbereder transkribering av mötet ",
"pending": "Förbereder transkribering av mötet ...",
"start": "Börja visa undertexter",
"stop": "Sluta visa undertexter",
"tr": "TR"
@@ -719,8 +997,9 @@
"onlyAudioSupported": "Vi stöder bara ljud i denna webbläsare.",
"sd": "SD",
"standardDefinition": "Normal upplösning",
"ldTooltip": "",
"hdTooltip": ""
"ldTooltip": "Titta på lågupplöst video",
"hdTooltip": "Titta på högupplöst video",
"sdTooltip": "Titta på video med standardupplösning"
},
"videothumbnail": {
"domute": "Tysta",
@@ -730,8 +1009,14 @@
"mute": "Deltagaren har avstängd mikrofon",
"muted": "Tystad",
"remoteControl": "Fjärrkontroll",
"show": "",
"videomute": "Deltagaren har stäng av kameran"
"show": "Visa på scenen",
"videomute": "Deltagaren har stäng av kameran",
"connectionInfo": "Anslutningsinformation",
"domuteVideo": "Inaktivera kamera",
"domuteOthers": "Inkativerad ljud för alla andra",
"domuteVideoOfOthers": "Inkativera kamera för alla andra",
"grantModerator": "Godkänn moderator",
"videoMuted": "kamera inaktiverad"
},
"welcomepage": {
"accessibilityLabel": {
@@ -754,28 +1039,150 @@
"recentList": "Tidigare",
"recentListDelete": "Radera",
"recentListEmpty": "Inga tidigare möten. Chatta med ditt team och hitta alla tidigare möten där.",
"reducedUIText": "",
"reducedUIText": "Välkommen till {{app}}!",
"roomname": "Skriv in rumsnamn",
"roomnameHint": "Ange namnet eller URL:en till mötesrummet du vill ansluta till. Du kan hitta på ett nytt namn, berätta då för de andra du tänker möta så de anger samma namn.",
"sendFeedback": "Ge återkoppling",
"terms": "Villkor",
"title": "Säkra, välutrustade och helt kostnadsfria videokonferenser",
"roomNameAllowedChars": "Mötesnamn kan inte innehålla dessa tecken: ?, &,:, ', \",%, #.",
"getHelp": "",
"goSmall": "BÖRJA"
"getHelp": "Få hjälp",
"goSmall": "BÖRJA",
"addMeetingName": "Lägg till mötesnamn",
"headerTitle": "Jitisi Meet",
"headerSubtitle": "Säkra- och högkvalitet möten",
"jitsiOnMobile": "Jitsi på mobilen - ladda ner våra appar och starta ett möte var som helst",
"mobileDownLoadLinkIos": "Ladda ner mobilappen för iOS",
"mobileDownLoadLinkAndroid": "Ladda ner mobilappen för Android",
"mobileDownLoadLinkFDroid": "Ladda ner mobilappen för F-droid",
"moderatedMessage": "Eller <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\"> boka en mötesadress </a> i förväg där du är den enda moderatorn.",
"startMeeting": "Starta möte",
"logo": {
"calendar": "Kalender logotyp",
"microsoftLogo": "Microsoft logotyp",
"logoDeepLinking": "Jitisi logotyp",
"desktopPreviewThumbnail": "Miniatyrbild av skrivbordsförhandsgranskning",
"googleLogo": "Google logotyp",
"policyLogo": "Policy-logotyp"
}
},
"defaultNickname": "till exempel Julia Eriksson",
"chromeExtensionBanner": {
"dontShowAgain": "Visa inte det här igen",
"buttonText": "Installera Chrome-tillägg",
"installExtensionText": "Installera tillägget för integration med Google Kalender och Office 365"
"installExtensionText": "Installera tillägget för integration med Google Kalender och Office 365",
"close": "Stäng"
},
"documentSharing": {
"title": ""
"title": "Delade dokument"
},
"raisedHand": "Jag vill prata",
"e2ee": {
"labelToolTip": "jud- och videokommunikation för detta samtal är krypterad från dator till dator"
},
"embedMeeting": {
"title": "Bädda in möte"
},
"raisedHand": "Räck upp handen",
"lonelyMeetingExperience": {
"youAreAlone": "Du är ensam i mötet",
"button": "Bjud in andra"
}
},
"helpView": {
"header": "Hjälpcenter"
},
"lobby": {
"admit": "Godkänn",
"admitAll": "Godkänn alla",
"knockingParticipantList": "Väntande deltagare",
"allow": "Tillåt",
"backToKnockModeButton": "Tillbaka till väntrum",
"dialogTitle": "Väntrum",
"disableDialogContent": "Väntrumsläge är för närvarande aktiverat. Denna funktion säkerställer att oönskade deltagare inte kan gå med i ditt möte. Vill du inaktivera det?",
"disableDialogSubmit": "Inaktivera",
"emailField": "Skriv in din mailadress",
"enableDialogPasswordField": "Ange lösenord (valfritt)",
"enableDialogSubmit": "Aktivera",
"enableDialogText": "Väntrumsläge låter dig skydda ditt möte genom att bara tillåta människor att komma in efter ett formellt godkännande av en moderator.",
"enterPasswordButton": "Ange möteslösenord",
"enterPasswordTitle": "Ange lösenord för att ansluta till mötet",
"errorMissingPassword": "Ange möteslösenord",
"invalidPassword": "Felaktigt lösenord",
"joiningMessage": "Du kommer anslutas till mötet så snart någon accepterat din begäran",
"joinWithPasswordMessage": "Försöker ansluta med lösenord, vänta...",
"joinRejectedMessage": "Din anslutningsbegäran avvisades av en moderator.",
"joinTitle": "Anslut till mötet",
"joiningTitle": "Begär att få delta i mötet...",
"joiningWithPasswordTitle": "Ansluter med lösenord...",
"knockButton": "Anslut till mötet",
"knockTitle": "Någon önskar delta i mötet",
"nameField": "Ange ditt namn",
"notificationLobbyAccessDenied": "{{targetParticipantName}} har nekats att delta av {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} har godkänts att delta av {{originParticipantName}}",
"notificationLobbyDisabled": "Väntrumsläge har inaktiverats av {{originParticipantName}}",
"notificationLobbyEnabled": "Väntrumsläge har aktiverats av {{originParticipantName}}",
"notificationTitle": "Väntrum",
"passwordField": "Ange möteslösenord",
"passwordJoinButton": "Anslut",
"reject": "Avvisa",
"rejectAll": "Avvisa alla",
"toggleLabel": "Aktivera väntrum"
},
"jitsiHome": "{{logo}} Logotyp, länkar till startsidan",
"participantsPane": {
"close": "Stäng",
"header": "Deltagare",
"headings": {
"lobby": "Väntrum ({{count}})",
"participantsList": "Mötesdeltagare ({{count}})",
"waitingLobby": "Väntar i väntrum ({{count}})"
},
"actions": {
"allow": "Låt deltagarna:",
"blockEveryoneMicCamera": "Inaktivera allas mikrofon och kamera",
"invite": "Bjud in någon",
"askUnmute": "Be om att aktivera ljud",
"mute": "Stäng av ljud",
"muteAll": "Stäng av all ljud",
"muteEveryoneElse": "Inaktivera ljud för alla deltagare",
"startModeration": "Slå på ljudet själv eller starta video",
"stopEveryonesVideo": "Inaktivera allas video",
"stopVideo": "Inaktivera video",
"unblockEveryoneMicCamera": "Aktivera allas mikrofon och kamera"
}
},
"polls": {
"create": {
"addOption": "Lägg till alternativ",
"answerPlaceholder": "Alternativ",
"create": "Skapa en omröstning",
"cancel": "Cancellera",
"pollOption": "Alternativ för omröstning",
"pollQuestion": "Fråga för omröstning",
"questionPlaceholder": "Ställ en fråga",
"removeOption": "Ta bort alternativ",
"send": "Skicka"
},
"answer": {
"skip": "Skicka",
"submit": "Skippa"
},
"results": {
"vote": "Rösta",
"changeVote": "Ändra din röst",
"empty": "Det finns inga omröstningar i mötet än. Starta en omröstning här!",
"hideDetailedResults": "Göm deltaljer",
"showDetailedResults": "Visa detaljer"
},
"notification": {
"title": "En ny omröstning har blivit tillagd till detta möte",
"description": "Öppna fliken omröstningar för att rösta"
}
},
"security": {
"about": "Du kan lägga till en $t(lockRoomPassword) till ditt möte. Deltagarna måste ange $t(lockRoomPassword) innan de får gå med i mötet.",
"aboutReadOnly": "Moderatorn kan lägga till en $t(lockRoomPassword) till mötet. Deltagarna måste ange $t(lockRoomPassword) innan de får gå med i mötet.",
"insecureRoomNameWarning": "Rummets namn är osäkert. Oönskade deltagare kan gå med i din konferens. Överväg att säkra ditt möte med hjälp av säkerhetsknappen.",
"securityOptions": "Säkerhetsalternativ"
},
"volumeSlider": "Volymreglage"
}

View File

@@ -1,11 +1,13 @@
{
"addPeople": {
"add": "Mời",
"copyInvite": "Sao chép lời mời",
"countryNotSupported": "Chúng tôi chưa hỗ trợ đích đến này.",
"countryReminder": "Đang gọi ra ngoài Mỹ? Đảm bảo bắt đầu bằng mã quốc gia!",
"disabled": "Bạn không thể mời thêm người.",
"failedToAdd": "",
"footerText": "Quay số bị tắt.",
"inviteMorePrompt": "Mời thêm người tham dự",
"loading": "Đang tìm kiếm người hoặc số điện thoại.",
"loadingNumber": "Đang xác nhận số điện thoại.",
"loadingPeople": "Đang tìm kiếm người để mời",
@@ -14,6 +16,8 @@
"searchNumbers": "Thêm số điện thoại",
"searchPeople": "Tìm người",
"searchPeopleAndNumbers": "Tìm người và thêm số",
"shareLink": "Chia sẻ đường dẫn để mời người khác tham dự cuộc họp",
"shareInvite": "Chia sẻ lời mời tham dự cuộc họp",
"telephone": "Số:{{number}}",
"title": "Mời người tham dự cuộc họp này"
},
@@ -45,13 +49,14 @@
"today": "Hôm nay"
},
"chat": {
"error": "Lỗi: thông điệp của bạn \"{{originalText}}\" không được gửi. Nguyên nhân: {{error}}",
"messagebox": "Nhập một thông điệp",
"error": "Lỗi: tin nhắn của bạn \"{{originalText}}\" không được gửi. Nguyên nhân: {{error}}",
"messagebox": "Nhập nội dung tin nhắn",
"nickname": {
"popover": "Chọn biệt danh",
"title": "Nhập một tên để sử dụng Chat"
"popover": "Chọn tên",
"title": "Nhập tên của bạn để tán gẫu"
},
"title": "Chat"
"title": "Tán gẫu",
"you": "bạn"
},
"connectingOverlay": {
"joiningRoom": "Đang kết nối tới cuộc họp của bạn…"
@@ -94,6 +99,7 @@
"remoteport_0": "Cổng từ xa:",
"remoteport_1": "Các cổng từ xa:",
"resolution": "Độ phân giải:",
"participant_id": "ID của người tham dự:",
"status": "Kết nối:",
"transport_0": "Vận chuyển:",
"transport_1": "Các vận chuyển:",
@@ -160,8 +166,12 @@
"dismiss": "Hủy",
"displayNameRequired": "",
"done": "Xong",
"e2eeDescription": "Mã hóa end-to-end vẫn đang trong giai đoạn THỬ NGHIỆM. Vui lòng lưu ý rằng việc kích hoạt mã hóa end-to-end sẽ tắt một số tính năng trên máy chủ bao gồm: ghi hình, phát trực tiếp và tham gia cuộc họp từ điện thoại. Đồng thời vui lòng lưu ý rằng chỉ có thể tham dự cuộc họp từ các trình duyệt có hỗ trợ nhúng luồng.",
"e2eeLabel": "Kích hoạt mã hóa end-to-end",
"e2eeWarning": " CẢNH BÁO: Có vẻ không phải phải tất cả mọi người trong cuộc họp này đều hỗ trợ mã hóa end-to-end. Nếu bạn kích hoạt nó, họ sẽ có thể không còn nghe hoặc thấy gì nữa.",
"enterDisplayName": "",
"error": "Lỗi",
"grantModeratorDialog": " Bạn có thực sự muốn cấp quyền quản trị cho người này?",
"externalInstallationMsg": "Bạn cần cài đặt tiện ích mở rộng chia sẻ máy tính của chúng tôi.",
"externalInstallationTitle": "Yêu cầu tiện ích mở rộng",
"goToStore": "Đi tới cửa hàng trên mạng",
@@ -194,10 +204,19 @@
"micNotSendingDataTitle": "",
"micPermissionDeniedError": "Bạn chưa cấp phép sử dụng microphone của bạn. Bạn vẫn có thể tham gia hội nghị nhưng những người khác sẽ không nghe thấy bạn. Sử dụng nút camera trên thanh địa chỉ để sửa lỗi này.",
"micUnknownError": "Không thể sử dụng microphone vì lý do không rõ ràng.",
"muteEveryoneElseDialog": "Một khi đã tắt tiếng, bạn không thể bật lại. Nhưng họ có thể tự mở tiếng lại bất kỳ lúc nào.",
"muteEveryoneElseTitle": "Tắt tiếng tất cả ngoại trừ {{whom}}?",
"muteEveryoneDialog": " Bạn có thực sự muốn tắt tiếng tất cả mọi người? Bạn sẽ không thể bật lại tiếng cho họ nhưng họ có thể tự mở tiếng lại bất kỳ lúc nào.",
"muteEveryoneTitle": "Tắt tiếng tất cả mọi người?",
"muteEveryonesVideoDialog": " Bạn có chắc muốn tắt camera của tất cả mọi người? Bạn không thể mở lại camera của người tham dự nhưng họ có thể mở lại bất kỳ lúc nào.",
"muteEveryonesVideoTitle": "Tắt camera của tất cả mọi người?",
"muteParticipantBody": "Bạn không thể tắt tiếng của họ, nhưng họ có thể tự tắt tiếng bất cứ lúc nào.",
"muteParticipantButton": "Tắt tiếng",
"muteParticipantDialog": "Bạn muốn tắt tiếng của người này? Bạn sẽ không thể bật lại tiếng, nhưng họ có thể tự bật lại tiếng bất cứ lúc nào.",
"muteParticipantTitle": "Tắt tiếng của người tham dự này?",
"muteParticipantsVideoButton": "Tắt camera",
"muteParticipantsVideoTitle": "Tắt camera của người này?",
"muteParticipantsVideoBody": "Bạn không thể bật lại camera, nhưng họ có thể bật lại bất kỳ lúc nào.",
"Ok": "Được",
"passwordLabel": "",
"passwordNotSupported": "Phòng họp không hỗ trợ khóa bằng mật khẩu.",
@@ -223,6 +242,7 @@
"reservationError": "Lỗi hệ thống đặt phòng",
"reservationErrorMsg": "Mã lỗi: {{code}}, thông báo: {{msg}}",
"retry": "Thử lại",
"screenSharingAudio": "Chia sẻ âm thanh",
"screenSharingFailedToInstall": "Duh! Không cài đặt được bộ mở rộng chia sẻ màn hình",
"screenSharingFailedToInstallTitle": "Duh! Bộ mở rộng chia sẻ màn hình có vấn đề với cấu hình bảo mật. Làm ơn tải và thử lại ",
"screenSharingFirefoxPermissionDeniedError": "Có gì đó sai khi chúng tôi cố gắng chia sẻ màn hình của bạn. Vui lòng đảm bảo bạn đã cho phép chúng tôi thực hiện.",
@@ -261,6 +281,32 @@
"dialOut": {
"statusMessage": "hiện đang {{status}}"
},
"embedMeeting": {
"title": "Nhúng cuộc họp"
},
"virtualBackground": {
"apply": "Áp dụng",
"title": "Hình nền ảo",
"blur": "Làm mờ",
"slightBlur": "Làm mờ nhẹ",
"removeBackground": "Xóa hình nền",
"addBackground": "Thêm hình nền",
"pleaseWait": "Vui lòng đợi...",
"none": "Không có",
"uploadedImage": "Tải ảnh lên {{index}}",
"deleteImage": "Xóa ảnh",
"image1": "Bãi biển",
"image2": "Tường trắng trung tính",
"image3": "Phòng trống màu trắng",
"image4": "Đèn sàn màu đen",
"image5": "Núi",
"image6": "Rừng",
"image7": "Mặt trời mọc",
"desktopShareError": "Không thể chia sẻ màn hình",
"desktopShare": "Chia sẻ màn hình",
"webAssemblyWarning": "WebAssembly không được hỗ trợ",
"backgroundEffectError": "Không thể áp dụng hiệu ứng hình nền."
},
"feedback": {
"average": "Trung bình",
"bad": "Kém",
@@ -428,6 +474,25 @@
"newDeviceAudioTitle": "Thiết bị âm thanh mới được phát hiện",
"newDeviceAction": "Sử dụng"
},
"participantsPane": {
"headings": {
"lobby": "Phòng chờ ({{count}})",
"participantsList": "Những người tham dự ({{count}})",
"waitingLobby": "Đang đợi ở phòng chờ ({{count}})"
},
"actions": {
"muteEveryoneElse": "Tắt tiếng những người khác",
"invite": "Mời người tham dự",
"askUnmute": "Yêu cầu bật tiếng",
"mute": "Tắt tiếng",
"muteAll": "Tắt tiếng tất cả mọi người",
"muteEveryoneElse": "Tắt tiếng tất cả những người khác",
"startModeration": "Unmute themselves or start video",
"stopEveryonesVideo": "Tắt hình của tất cả mọi người",
"stopVideo": "Tắt hình",
"unblockEveryoneMicCamera": "Mở khóa camera và micro của tất cả mọi người"
}
},
"passwordSetRemotely": "được thiết lập bởi một người khác",
"passwordDigitsOnly": "",
"poweredby": "Được hỗ trợ bởi",
@@ -479,6 +544,11 @@
"sectionList": {
"pullToRefresh": "Kéo để làm tươi"
},
"security": {
"about": "Bạn có thể thiết lập mật khẩu cho cuộc họp. Người tham dự cần phải nhập mật khẩu trước khi được phép vào phòng họp.",
"insecureRoomNameWarning": "Cuộc họp này không bảo mật. Những người tham dự không mong muốn có thể tham gia cuộc họp của bạn.",
"securityOptions": "Tùy chọn bảo mật"
},
"settings": {
"calendar": {
"about": "{{appName}} tích hợp lịch được sử dụng để truy cập bảo mật lịch để lấy thông tin sự kiện sắp tới.",
@@ -549,6 +619,7 @@
"document": "Mở/Đóng tài liệu được chia sẻ",
"feedback": "Để lại phản hồi",
"fullScreen": "Mở/Đóng toàn màn hình",
"grantModerator": "Cấp quyền quản trị",
"hangup": "Rời cuộc gọi",
"invite": "Mời người tham gia",
"kick": "Đẩy người tham gia ra",
@@ -557,6 +628,9 @@
"moreActions": "Mở/Đóng Thêm hành động",
"moreActionsMenu": "Menu Thêm hành động",
"mute": "Mở/Đóng Tắt tiếng",
"muteEveryone": "Tắt tiếng tất cả mọi người",
"muteEveryoneElse": "Tắt tiếng những người khác",
"muteEveryonesVideo": "Tắt tất cả camera",
"pip": "Mở/Đóng chế độ Hình-trong-Hình",
"profile": "Chỉnh sửa hồ sơ cá nhân",
"raiseHand": "Mở/Đóng Giơ tay",
@@ -572,9 +646,12 @@
"tileView": "Mở/Đóng Xem dạng lưới",
"toggleCamera": "Mở/Đóng Camera",
"videomute": "Mở/Đóng Tiếng, Hình",
"videoblur": ""
"videoblur": "Chuyển đổi làm mờ video",
"selectBackground": "Chọn hình nền"
},
"addPeople": "Thêm người vào cuộc gọi",
"audioSettings": "Cài đặt âm thanh",
"videoSettings": "Cài đặt hình ảnh",
"audioOnlyOff": "Chế độ chỉ tắt tiếng",
"audioOnlyOn": "Bật chế độ Chỉ âm thanh",
"audioRoute": "Chọn thiết bị âm thanh",
@@ -596,11 +673,17 @@
"lowerYourHand": "Hạ tay",
"moreActions": "Thêm hành động",
"mute": "Tắt tiếng / Bật tiếng",
"muteEveryone": "Tắt tiếng tất cả mọi người",
"muteEveryonesVideo": "Tắt tất cả camera",
"noisyAudioInputTitle": "Micro của bạn dường như có nhiều tiếng ồn!",
"noisyAudioInputDesc": "Dường như micro của bạn đang tạo ra tiếng ồn. Vui lòng tắt tiếng hoặc thay thiết bị khác.",
"openChat": "Mở Chat",
"participants": "Những người tham dự",
"pip": "Vào chế độ Ảnh-trong-Ảnh",
"profile": "Chỉnh sửa hồ sơ cá nhân",
"raiseHand": "Giơ / Hạ tay",
"raiseYourHand": "Giơ tay",
"security": "Tùy chọn bảo mật",
"Settings": "Cài đặt",
"sharedvideo": "Chia sẻ YouTube video",
"shareRoom": "Mời ai đó",
@@ -616,7 +699,8 @@
"toggleCamera": "Mở/Đóng Camera",
"videomute": "Bật / Tắt camera",
"startvideoblur": "",
"stopvideoblur": ""
"stopvideoblur": "",
"selectBackground": "Chọn hình nền"
},
"transcribing": {
"ccButtonTooltip": "Chạy/Dừng phụ đề",
@@ -655,7 +739,7 @@
"videoStatus": {
"audioOnly": "AUD",
"audioOnlyExpanded": "Bạn đang ở chế độ chỉ tiếng. Chế độ này giảm băng thông nhưng không thấy hình ảnh người khác.",
"callQuality": "",
"callQuality": "Chất lượng hình ảnh",
"hd": "HD",
"highDefinition": "HD",
"labelTooiltipNoVideo": "Không hình ảnh",
@@ -670,6 +754,7 @@
"videothumbnail": {
"domute": "Tắt tiếng",
"flip": "Lật",
"grantModerator": "Cấp quyền quản trị",
"kick": "Đẩy ra",
"moderator": "Quản trị viên",
"mute": "Người tham gia bị tắt tiếng",
@@ -706,4 +791,4 @@
"terms": "Điều kiện",
"title": "Bảo mật, đầy đủ tính năng và miễn phí hoàn toàn"
}
}
}

View File

@@ -209,7 +209,6 @@
"e2eeLabel": "啟用端對端加密",
"e2eeWarning": "警告:看來不是每位此會議的參與者都有啟用端對端加密,如果您啟用了,他們可能無法看/聽到您。",
"enterDisplayName": "請在此輸入您自己的名字",
"enterDisplayNameToJoin": "請輸入您的名字以加入",
"embedMeeting": "嵌入會議",
"error": "錯誤",
"gracefulShutdown": "我們的服務目前關閉維護中,請稍後再試。",

View File

@@ -58,7 +58,7 @@
"today": "Today"
},
"chat": {
"enter": "Enter chat room",
"enter": "Enter room",
"error": "Error: your message was not sent. Reason: {{error}}",
"fieldPlaceHolder": "Type your message here",
"messagebox": "Type a message",
@@ -66,15 +66,19 @@
"noMessagesMessage": "There are no messages in the meeting yet. Start a conversation here!",
"nickname": {
"popover": "Choose a nickname",
"title": "Enter a nickname to use chat"
"title": "Enter a nickname to use chat and polls"
},
"privateNotice": "Private message to {{recipient}}",
"title": "Chat",
"you": "you",
"message": "Message",
"messageAccessibleTitle": "{{user}} says:",
"messageAccessibleTitleMe": "me says:",
"smileysPanel": "Emoji panel"
"smileysPanel": "Emoji panel",
"tabs": {
"chat": "Chat",
"polls": "Polls"
},
"title": "Chat and Polls",
"you": "you"
},
"chromeExtensionBanner": {
"installExtensionText": "Install the extension for Google Calendar and Office 365 integration",
@@ -205,11 +209,10 @@
"dismiss": "Dismiss",
"displayNameRequired": "Hi! Whats your name?",
"done": "Done",
"e2eeDescription": "End-to-End Encryption is currently EXPERIMENTAL. Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.",
"e2eeDescription": "End-to-End Encryption is currently EXPERIMENTAL. Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.",
"e2eeLabel": "Enable End-to-End Encryption",
"e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
"enterDisplayName": "Please enter your name here",
"enterDisplayNameToJoin": "Please enter your name to join",
"enterDisplayName": "Enter your name here",
"embedMeeting": "Embed meeting",
"error": "Error",
"gracefulShutdown": "Our service is currently down for maintenance. Please try again later.",
@@ -383,7 +386,8 @@
"image7" : "Sunrise",
"desktopShareError": "Could not create desktop share",
"desktopShare":"Desktop share",
"webAssemblyWarning": "WebAssembly not supported"
"webAssemblyWarning": "WebAssembly not supported",
"backgroundEffectError": "Failed to apply background effect."
},
"feedback": {
"average": "Average",
@@ -539,7 +543,7 @@
"me": "me",
"notify": {
"connectedOneMember": "{{name}} joined the meeting",
"connectedThreePlusMembers": "{{name}} and {{count}} others joined the meeting",
"connectedThreePlusMembers": "{{name}} and many others joined the meeting",
"connectedTwoMembers": "{{first}} and {{second}} joined the meeting",
"disconnected": "disconnected",
"focus": "Conference focus",
@@ -588,6 +592,7 @@
"moderationStoppedTitle": "Moderation stopped",
"moderationToggleDescription": "by {{participantDisplayName}}",
"raiseHandAction": "Raise hand",
"reactionSounds": "Disable sounds",
"groupTitle": "Notifications"
},
"participantsPane": {
@@ -614,6 +619,34 @@
},
"passwordSetRemotely": "Set by another participant",
"passwordDigitsOnly": "Up to {{number}} digits",
"polls": {
"create": {
"addOption": "Add option",
"answerPlaceholder": "Option {{index}}",
"create": "Create a poll",
"cancel": "Cancel",
"pollOption" : "Poll option {{index}}",
"pollQuestion" : "Poll Question",
"questionPlaceholder": "Ask a question",
"removeOption": "Remove option",
"send": "Send"
},
"answer": {
"skip": "Skip",
"submit": "Submit"
},
"results": {
"vote": "Vote",
"changeVote": "Change vote",
"empty": "There are no polls in the meeting yet. Start a poll here!",
"hideDetailedResults": "Hide details",
"showDetailedResults": "Show details"
},
"notification": {
"title": "A new poll was added to this meeting",
"description": "Open polls tab to vote"
}
},
"poweredby": "powered by",
"prejoin": {
"audioAndVideoError": "Audio and video error:",
@@ -662,7 +695,7 @@
"joinWithoutAudio": "Join without audio",
"initiated": "Call initiated",
"linkCopied": "Link copied to clipboard",
"lookGood": "It sounds like your microphone is working properly",
"lookGood": "Your microphone is working properly",
"or": "or",
"premeeting": "Pre meeting",
"showScreen": "Enable pre meeting screen",
@@ -763,6 +796,7 @@
"participantJoined": "Participant Joined",
"participantLeft": "Participant Left",
"playSounds": "Play sound on",
"reactions": "Meeting reactions",
"sameAsSystem": "Same as system ({{label}})",
"selectAudioOutput": "Audio output",
"selectCamera": "Camera",
@@ -802,6 +836,7 @@
},
"speaker": "Speaker",
"speakerStats": {
"search": "Search",
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "Name",
@@ -852,7 +887,6 @@
"muteEveryonesVideo": "Disable everyone's camera",
"muteEveryoneElsesVideo": "Disable everyone else's camera",
"participants": "Participants",
"party": "Party Popper",
"pip": "Toggle Picture-in-Picture mode",
"privateMessage": "Send private message",
"profile": "Edit your profile",
@@ -869,6 +903,7 @@
"shareYourScreen": "Start / Stop sharing your screen",
"shortcuts": "Toggle shortcuts",
"show": "Show on stage",
"silence": "Silence",
"speakerStats": "Toggle speaker statistics",
"surprised": "Surprised",
"tileView": "Toggle tile view",
@@ -893,6 +928,7 @@
"clap": "Clap",
"closeChat": "Close chat",
"closeReactionsMenu": "Close reactions menu",
"disableReactionSounds": "You can disable reaction sounds for this meeting",
"documentClose": "Close shared document",
"documentOpen": "Open shared document",
"download": "Download our apps",
@@ -928,7 +964,6 @@
"openChat": "Open chat",
"openReactionsMenu": "Open reactions menu",
"participants": "Participants",
"party": "Celebration",
"pip": "Enter Picture-in-Picture mode",
"privateMessage": "Send private message",
"profile": "Edit your profile",
@@ -938,7 +973,7 @@
"reactionClap": "Send clap reaction",
"reactionLaugh": "Send laugh reaction",
"reactionLike": "Send thumbs up reaction",
"reactionParty": "Send party popper reaction",
"reactionSilence": "Send silence reaction",
"reactionSurprised": "Send surprised reaction",
"security": "Security options",
"Settings": "Settings",
@@ -946,6 +981,7 @@
"sharedvideo": "Share video",
"shareRoom": "Invite someone",
"shortcuts": "View shortcuts",
"silence": "Silence",
"speakerStats": "Speaker stats",
"startScreenSharing": "Start screen sharing",
"startSubtitles": "Start subtitles",
@@ -1088,7 +1124,7 @@
"admitAll": "Admit all",
"knockingParticipantList": "Knocking participant list",
"allow": "Allow",
"backToKnockModeButton": "No password, ask to join instead",
"backToKnockModeButton": "Ask to join",
"dialogTitle": "Lobby mode",
"disableDialogContent": "Lobby mode is currently enabled. This feature ensures that unwanted participants can't join your meeting. Do you want to disable it?",
"disableDialogSubmit": "Disable",
@@ -1098,6 +1134,7 @@
"enableDialogText": "Lobby mode lets you protect your meeting by only allowing people to enter after a formal approval by a moderator.",
"enterPasswordButton": "Enter meeting password",
"enterPasswordTitle": "Enter password to join meeting",
"errorMissingPassword": "Please enter the meeting password",
"invalidPassword": "Invalid password",
"joiningMessage": "You'll join the meeting as soon as someone accepts your request",
"joinWithPasswordMessage": "Trying to join with password, please wait...",

View File

@@ -12,9 +12,6 @@ var loggingConfig = {
// {@link #defaultLogLevel}:
'modules/RTC/TraceablePeerConnection.js': 'info',
'modules/statistics/CallStats.js': 'info',
'modules/sdp/SDPUtil.js': 'info',
'modules/xmpp/JingleSessionPC.js': 'info',
'modules/xmpp/strophe.jingle.js': 'info',
'modules/xmpp/strophe.util.js': 'log'
};

View File

@@ -1325,6 +1325,19 @@ class API {
});
}
/**
* Notify external application (if API is enabled) that an error occured.
*
* @param {Object} error - The error.
* @returns {void}
*/
notifyError(error: Object) {
this._sendEvent({
name: 'error-occurred',
error
});
}
/**
* Disposes the allocated resources.
*

View File

@@ -15,8 +15,3 @@ export const API_ID = parseURLParams(window.location).jitsi_meet_external_api_id
* The payload name for the datachannel/endpoint text message event
*/
export const ENDPOINT_TEXT_MESSAGE_NAME = 'endpoint-text-message';
/**
* The payload name for the datachannel/endpoint reaction event
*/
export const ENDPOINT_REACTION_NAME = 'endpoint-reaction';

View File

@@ -81,6 +81,7 @@ const events = {
'device-list-changed': 'deviceListChanged',
'display-name-change': 'displayNameChange',
'email-change': 'emailChange',
'error-occurred': 'errorOccurred',
'endpoint-text-message-received': 'endpointTextMessageReceived',
'feedback-submitted': 'feedbackSubmitted',
'feedback-prompt-displayed': 'feedbackPromptDisplayed',

View File

@@ -98,14 +98,21 @@ function computeCameraVideoSize( // eslint-disable-line max-params
}
const aspectRatio = videoWidth / videoHeight;
const videoSpaceRatio = videoSpaceWidth / videoSpaceHeight;
switch (videoLayoutFit) {
case 'height':
return [ videoSpaceHeight * aspectRatio, videoSpaceHeight ];
case 'width':
return [ videoSpaceWidth, videoSpaceWidth / aspectRatio ];
case 'nocrop':
return computeCameraVideoSize(
videoWidth,
videoHeight,
videoSpaceWidth,
videoSpaceHeight,
videoSpaceRatio < aspectRatio ? 'width' : 'height');
case 'both': {
const videoSpaceRatio = videoSpaceWidth / videoSpaceHeight;
const maxZoomCoefficient = interfaceConfig.MAXIMUM_ZOOMING_COEFFICIENT
|| Infinity;

68
package-lock.json generated
View File

@@ -4,6 +4,11 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@amplitude/react-native": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@amplitude/react-native/-/react-native-2.3.3.tgz",
"integrity": "sha512-QTpwy4lKy9kpBjB2334HCEIU7QwGFAkGRfp21aeDA87D6pkiUMAvyDYbz58CnB5HCXuqcvws3GN8d60RO9KF9A=="
},
"@amplitude/types": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@amplitude/types/-/types-1.5.5.tgz",
@@ -2747,11 +2752,18 @@
}
},
"@jitsi/sdp-interop": {
"version": "github:jitsi/sdp-interop#5fc4af6dcf8a6e6af9fedbcd654412fd47b1b4ae",
"from": "github:jitsi/sdp-interop#5fc4af6dcf8a6e6af9fedbcd654412fd47b1b4ae",
"version": "github:jitsi/sdp-interop#98cd62cc00f92c8c2430e52ca746a86813658e83",
"from": "github:jitsi/sdp-interop#98cd62cc00f92c8c2430e52ca746a86813658e83",
"requires": {
"lodash.clonedeep": "4.5.0",
"sdp-transform": "2.3.0"
"sdp-transform": "2.14.1"
},
"dependencies": {
"sdp-transform": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz",
"integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw=="
}
}
},
"@jitsi/sdp-simulcast": {
@@ -2898,6 +2910,10 @@
"react-is": "^16.8.0 || ^17.0.0"
}
},
"@matrix-org/olm": {
"version": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
"integrity": "sha512-OhC9wwZ/ox9vputA1MR2A7QlYlvfXCV+tdbADOR7Jn7o9qoXh3HWf+AbSpXTK3daF0GIHA69Ws8XOnWqu5n53A=="
},
"@microsoft/microsoft-graph-client": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-1.1.0.tgz",
@@ -7353,6 +7369,11 @@
"resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
},
"diacritics": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
"integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E="
},
"didyoumean": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz",
@@ -7468,12 +7489,18 @@
}
},
"dropbox": {
"version": "4.0.9",
"resolved": "https://registry.npmjs.org/dropbox/-/dropbox-4.0.9.tgz",
"integrity": "sha512-UeaKw7DY24ZGLRV8xboZvbZXhbTVrFjPjfpr0LfF/KVOzBUad9vJJwqz3udqTLNxD0FXbFlC9rlNLLNXaj9msg==",
"version": "10.7.0",
"resolved": "https://registry.npmjs.org/dropbox/-/dropbox-10.7.0.tgz",
"integrity": "sha512-btNLOYHxukACfnkEUNhlTPCnkecfbL89mrPU3RMKAWdCQXM18aRLm+t+0xIpzvRUSGeXPER+3d+QJk5Wi+4QGw==",
"requires": {
"buffer": "^5.0.8",
"moment": "^2.19.3"
"node-fetch": "^2.6.1"
},
"dependencies": {
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
}
}
},
"duplexer": {
@@ -9868,9 +9895,12 @@
"integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
},
"i18n-iso-countries": {
"version": "3.7.8",
"resolved": "https://registry.npmjs.org/i18n-iso-countries/-/i18n-iso-countries-3.7.8.tgz",
"integrity": "sha512-NkT3lRiw7D4kKtSAVjVdHCvGlc2UOe0ALKa9IfEx0LkEDf0q3YgjP/veVk0d/OZ7yqUNzV8aJP4lJc6RPj++Gw=="
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/i18n-iso-countries/-/i18n-iso-countries-6.8.0.tgz",
"integrity": "sha512-jJs/+CA6+VUICFxqGcB0vFMERGfhfvyNk+8Vb9EagSZkl7kSpm/kT0VyhvzM/zixDWEV/+oN9L7v/GT9BwzoGg==",
"requires": {
"diacritics": "1.3.0"
}
},
"i18next": {
"version": "17.0.6",
@@ -11087,11 +11117,11 @@
}
},
"lib-jitsi-meet": {
"version": "github:jitsi/lib-jitsi-meet#6a3df11ffa7a2204b579326e23cdaa85a79521d1",
"from": "github:jitsi/lib-jitsi-meet#6a3df11ffa7a2204b579326e23cdaa85a79521d1",
"version": "github:jitsi/lib-jitsi-meet#28a53553569dbb4adcba39cd997ff121b4d05c62",
"from": "github:jitsi/lib-jitsi-meet#28a53553569dbb4adcba39cd997ff121b4d05c62",
"requires": {
"@jitsi/js-utils": "1.0.2",
"@jitsi/sdp-interop": "github:jitsi/sdp-interop#5fc4af6dcf8a6e6af9fedbcd654412fd47b1b4ae",
"@jitsi/sdp-interop": "github:jitsi/sdp-interop#98cd62cc00f92c8c2430e52ca746a86813658e83",
"@jitsi/sdp-simulcast": "0.4.0",
"async": "0.9.0",
"base64-js": "1.3.1",
@@ -12955,10 +12985,6 @@
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
"dev": true
},
"olm": {
"version": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz",
"integrity": "sha512-B87bTpGIGieuV2FNauChjjQtVltwTGagQFoHm+3Dcse4amKAAGJB/I54dnP/JtbHZ+RYVoApM2OQ46Z4VH6eNg=="
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -15170,9 +15196,9 @@
"integrity": "sha512-iqdJ1KpZbR4XGahgVmaeibB7kDhyMT7wrylINgJaYBY38IAiI0LF32VX1umO4pko6n21YF5I/kSeNQ+OXGqqow=="
},
"react-native-webrtc": {
"version": "1.92.0",
"resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-1.92.0.tgz",
"integrity": "sha512-nztKQ/SmO1DgA3QWCDHHK8ZVDf+5rLbmH42Ukoqnld7ut8/ehmFZXc17aSV/BN0H60jPigGqAMYopt/LZak7Sg==",
"version": "1.92.1",
"resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-1.92.1.tgz",
"integrity": "sha512-cbFU1acL9aud/ohk/40jwahSNac4PwBKdmRPgXb9WqaGwxAr4CgSsrBRmruCISMdw0Pec+ZoZtYjXVuHzF51sg==",
"requires": {
"base64-js": "^1.1.2",
"cross-os": "^1.3.0",

View File

@@ -15,6 +15,7 @@
"author": "",
"readmeFilename": "README.md",
"dependencies": {
"@amplitude/react-native": "2.3.3",
"@atlaskit/button": "15.1.4",
"@atlaskit/checkbox": "12.0.0",
"@atlaskit/dropdown-menu": "10.1.2",
@@ -35,6 +36,7 @@
"@hapi/bourne": "2.0.0",
"@jitsi/js-utils": "1.0.6",
"@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",
@@ -45,9 +47,9 @@
"base64-js": "1.3.1",
"bc-css-flags": "3.0.0",
"clipboard-copy": "4.0.1",
"dropbox": "4.0.9",
"dropbox": "10.7.0",
"focus-visible": "5.1.0",
"i18n-iso-countries": "3.7.8",
"i18n-iso-countries": "6.8.0",
"i18next": "17.0.6",
"i18next-browser-languagedetector": "3.0.1",
"i18next-xhr-backend": "3.0.0",
@@ -56,12 +58,11 @@
"jquery-i18next": "1.2.1",
"js-md5": "0.6.1",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#6a3df11ffa7a2204b579326e23cdaa85a79521d1",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#28a53553569dbb4adcba39cd997ff121b4d05c62",
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
"lodash": "4.17.21",
"moment": "2.29.1",
"moment-duration-format": "2.2.2",
"olm": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz",
"optional-require": "1.0.3",
"pixelmatch": "5.1.0",
"promise.allsettled": "1.0.4",
@@ -89,7 +90,7 @@
"react-native-url-polyfill": "1.2.0",
"react-native-video": "5.1.1",
"react-native-watch-connectivity": "0.4.3",
"react-native-webrtc": "1.92.0",
"react-native-webrtc": "1.92.1",
"react-native-webview": "11.0.2",
"react-native-youtube-iframe": "2.1.1",
"react-redux": "7.1.0",

View File

@@ -11,6 +11,39 @@ index bd48f44..d243ed0 100644
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

View File

@@ -1,9 +1,8 @@
import amplitude from 'amplitude-js';
import logger from '../logger';
import AbstractHandler from './AbstractHandler';
import { fixDeviceID } from './amplitude';
import { fixDeviceID } from './amplitude/fixDeviceID';
import amplitude from './amplitude/lib';
/**
* Analytics handler for Amplitude.
@@ -19,41 +18,39 @@ export default class AmplitudeHandler extends AbstractHandler {
constructor(options) {
super(options);
const { amplitudeAPPKey, host, user } = options;
const { amplitudeAPPKey, user } = options;
this._enabled = true;
this._host = host; // Only used on React Native.
const onError = e => {
logger.error('Error initializing Amplitude', e);
this._enabled = false;
};
const amplitudeOptions = {
domain: navigator.product === 'ReactNative' ? host : undefined,
includeReferrer: true,
onError
};
if (navigator.product === 'ReactNative') {
amplitude.getInstance().init(amplitudeAPPKey);
fixDeviceID(amplitude.getInstance()).then(() => {
amplitude.getInstance().getDeviceId()
.then(deviceId => {
this._deviceId = deviceId;
});
});
} else {
const amplitudeOptions = {
includeReferrer: true,
onError
};
this._getInstance().init(amplitudeAPPKey, undefined, amplitudeOptions);
fixDeviceID(this._getInstance());
amplitude.getInstance().init(amplitudeAPPKey, undefined, amplitudeOptions);
fixDeviceID(amplitude.getInstance());
}
if (user) {
this._getInstance().setUserId(user);
this._userId = user;
amplitude.getInstance().setUserId(user);
}
}
/**
* Returns the AmplitudeClient instance.
*
* @returns {AmplitudeClient}
*/
_getInstance() {
const name = navigator.product === 'ReactNative' ? this._host : undefined;
return amplitude.getInstance(name);
}
/**
* Sets the Amplitude user properties.
*
@@ -62,7 +59,7 @@ export default class AmplitudeHandler extends AbstractHandler {
*/
setUserProperties(userProps) {
if (this._enabled) {
this._getInstance().setUserProperties(userProps);
amplitude.getInstance().setUserProperties(userProps);
}
}
@@ -79,7 +76,7 @@ export default class AmplitudeHandler extends AbstractHandler {
return;
}
this._getInstance().logEvent(this._extractName(event), event);
amplitude.getInstance().logEvent(this._extractName(event), event);
}
/**
@@ -88,10 +85,17 @@ export default class AmplitudeHandler extends AbstractHandler {
* @returns {Object}
*/
getIdentityProps() {
if (navigator.product === 'ReactNative') {
return {
deviceId: this._deviceId,
userId: this._userId
};
}
return {
sessionId: this._getInstance().getSessionId(),
deviceId: this._getInstance().options.deviceId,
userId: this._getInstance().options.userId
sessionId: amplitude.getInstance().getSessionId(),
deviceId: amplitude.getInstance().options.deviceId,
userId: amplitude.getInstance().options.userId
};
}
}

View File

@@ -1 +0,0 @@
export * from './fixDeviceID';

View File

@@ -0,0 +1,3 @@
import { Amplitude } from '@amplitude/react-native';
export default Amplitude;

View File

@@ -0,0 +1,3 @@
import amplitude from 'amplitude-js';
export default amplitude;

View File

@@ -43,9 +43,11 @@ export class App extends AbstractApp {
*/
_renderDialogContainer() {
return (
<AtlasKitThemeProvider mode = 'dark'>
<DialogContainer />
</AtlasKitThemeProvider>
<JitsiThemeProvider>
<AtlasKitThemeProvider mode = 'dark'>
<DialogContainer />
</AtlasKitThemeProvider>
</JitsiThemeProvider>
);
}
}

View File

@@ -34,6 +34,8 @@ import '../large-video/middleware';
import '../lobby/middleware';
import '../notifications/middleware';
import '../overlay/middleware';
import '../polls/middleware';
import '../polls/subscriber';
import '../reactions/middleware';
import '../recent-list/middleware';
import '../recording/middleware';

View File

@@ -41,6 +41,7 @@ import '../lobby/reducer';
import '../notifications/reducer';
import '../overlay/reducer';
import '../participants-pane/reducer';
import '../polls/reducer';
import '../reactions/reducer';
import '../recent-list/reducer';
import '../recording/reducer';

View File

@@ -124,15 +124,8 @@ class LoginDialog extends Component<Props, State> {
*/
_onCancelLogin() {
const { dispatch } = this.props;
const cancelButton = document.getElementById('modal-dialog-cancel-button');
if (cancelButton) {
cancelButton.onclick = () => {
dispatch(cancelLogin());
};
}
return false;
dispatch(cancelLogin());
}
_onLogin: () => void;
@@ -252,6 +245,7 @@ class LoginDialog extends Component<Props, State> {
return (
<Dialog
disableBlanketClickDismiss = { true }
hideCloseIconButton = { true }
okDisabled = {
connecting

View File

@@ -64,15 +64,8 @@ class WaitForOwnerDialog extends PureComponent<Props> {
*/
_onCancelWaitForOwner() {
const { dispatch } = this.props;
const cancelButton = document.getElementById('modal-dialog-cancel-button');
if (cancelButton) {
cancelButton.onclick = () => {
dispatch(cancelWaitForOwner());
};
}
return false;
dispatch(cancelWaitForOwner());
}
_onIAmHost: () => void;
@@ -102,6 +95,7 @@ class WaitForOwnerDialog extends PureComponent<Props> {
return (
<Dialog
disableBlanketClickDismiss = { true }
hideCloseIconButton = { true }
okKey = { t('dialog.IamHost') }
onCancel = { this._onCancelWaitForOwner }

View File

@@ -53,20 +53,20 @@ export const disableModeration = (mediaType: MediaType, actor: Object) => {
* @returns {Object}
*/
export function dismissPendingAudioParticipant(participant: Object) {
return dismissPendingParticipant(participant, MEDIA_TYPE.AUDIO);
return dismissPendingParticipant(participant.id, MEDIA_TYPE.AUDIO);
}
/**
* Hides the notification with the participant that asked to unmute.
*
* @param {Object} participant - The participant for which the notification to be hidden.
* @param {string} id - The participant id for which the notification to be hidden.
* @param {MediaType} mediaType - The media type.
* @returns {Object}
*/
export function dismissPendingParticipant(participant: Object, mediaType: MediaType) {
export function dismissPendingParticipant(id: string, mediaType: MediaType) {
return {
type: DISMISS_PENDING_PARTICIPANT,
participant,
id,
mediaType
};
}

View File

@@ -5,8 +5,11 @@ import { getConferenceState } from '../base/conference';
import { JitsiConferenceEvents } from '../base/lib-jitsi-meet';
import { MEDIA_TYPE } from '../base/media';
import {
getLocalParticipant,
getParticipantDisplayName,
getRemoteParticipants,
isLocalParticipantModerator,
isParticipantModerator,
PARTICIPANT_UPDATED,
raiseHand
} from '../base/participants';
@@ -124,19 +127,29 @@ MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
case PARTICIPANT_UPDATED: {
const state = getState();
const audioModerationEnabled = isEnabledFromState(MEDIA_TYPE.AUDIO, state);
const participant = action.participant;
// this is handled only by moderators
if (audioModerationEnabled && isLocalParticipantModerator(state)) {
const participant = action.participant;
if (participant && audioModerationEnabled) {
if (isLocalParticipantModerator(state)) {
if (participant.raisedHand) {
// if participant raises hand show notification
!isParticipantApproved(participant.id, MEDIA_TYPE.AUDIO)(state)
// this is handled only by moderators
if (participant.raisedHand) {
// if participant raises hand show notification
!isParticipantApproved(participant.id, MEDIA_TYPE.AUDIO)(state)
&& dispatch(participantPendingAudio(participant));
} else {
// if participant lowers hand hide notification
isParticipantPending(participant, MEDIA_TYPE.AUDIO)(state)
} else {
// if participant lowers hand hide notification
isParticipantPending(participant, MEDIA_TYPE.AUDIO)(state)
&& dispatch(dismissPendingAudioParticipant(participant));
}
} else if (participant.id === getLocalParticipant(state).id
&& /* the new role */ isParticipantModerator(participant)) {
// this is the granted moderator case
getRemoteParticipants(state).forEach(p => {
p.raisedHand && !isParticipantApproved(p.id, MEDIA_TYPE.AUDIO)(state)
&& dispatch(participantPendingAudio(p));
});
}
}

View File

@@ -135,7 +135,7 @@ ReducerRegistry.register('features/av-moderation', (state = initialState, action
}
if (videoModerationEnabled) {
hasStateChanged = _updatePendingParticipant(MEDIA_TYPE.VIDEO, participant, state);
hasStateChanged = hasStateChanged || _updatePendingParticipant(MEDIA_TYPE.VIDEO, participant, state);
}
// If the state has changed we need to return a new object reference in order to trigger subscriber updates.
@@ -183,19 +183,19 @@ ReducerRegistry.register('features/av-moderation', (state = initialState, action
}
case DISMISS_PENDING_PARTICIPANT: {
const { participant, mediaType } = action;
const { id, mediaType } = action;
if (mediaType === MEDIA_TYPE.AUDIO) {
return {
...state,
pendingAudio: state.pendingAudio.filter(pending => pending.id !== participant.id)
pendingAudio: state.pendingAudio.filter(pending => pending.id !== id)
};
}
if (mediaType === MEDIA_TYPE.VIDEO) {
return {
...state,
pendingVideo: state.pendingVideo.filter(pending => pending.id !== participant.id)
pendingVideo: state.pendingVideo.filter(pending => pending.id !== id)
};
}

View File

@@ -100,6 +100,18 @@ export default class BaseApp extends Component<*, State> {
this.state.store.dispatch(appWillUnmount(this));
}
/**
* Logs for errors that were not caught.
*
* @param {Error} error - The error that was thrown.
* @param {Object} info - Info about the error(stack trace);.
*
* @returns {void}
*/
componentDidCatch(error: Error, info: Object) {
logger.error(error, info);
}
/**
* Delays this {@code BaseApp}'s startup until the {@code Storage}
* implementation of {@code localStorage} initializes. While the

View File

@@ -170,7 +170,7 @@ function _addConferenceListeners(conference, dispatch, state) {
conference.on(
JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,
id => dispatch(dominantSpeakerChanged(id, conference)));
(dominant, previous) => dispatch(dominantSpeakerChanged(dominant, previous, conference)));
conference.on(
JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,

View File

@@ -3,6 +3,7 @@
import _ from 'lodash';
import { getName } from '../../app/functions';
import { determineTranscriptionLanguage } from '../../transcribing/functions';
import { JitsiTrackErrors } from '../lib-jitsi-meet';
import {
getLocalParticipant,
@@ -231,12 +232,13 @@ export function getConferenceOptions(stateful: Function | Object) {
}
options.applicationName = getName();
options.transcriptionLanguage = determineTranscriptionLanguage(options);
// Disable analytics, if requessted.
// Disable analytics, if requested.
if (options.disableThirdPartyRequests) {
delete config.analytics.scriptURLs;
delete config.analytics.amplitudeAPPKey;
delete config.analytics.googleAnalyticsTrackingId;
delete config.analytics?.scriptURLs;
delete config.analytics?.amplitudeAPPKey;
delete config.analytics?.googleAnalyticsTrackingId;
delete options.callStatsID;
delete options.callStatsSecret;
} else {

View File

@@ -551,7 +551,7 @@ function _updateLocalParticipantInConference({ dispatch, getState }, next, actio
const localParticipant = getLocalParticipant(getState);
if (conference && participant.id === localParticipant.id) {
if (conference && participant.id === localParticipant?.id) {
if ('name' in participant) {
conference.setDisplayName(participant.name);
}

View File

@@ -1,21 +1,20 @@
// @flow
import { setPrejoinPageVisibility, setSkipPrejoinOnReload } from '../../prejoin';
import { PREJOIN_SCREEN_STATES } from '../../prejoin/constants';
import { JitsiConferenceErrors } from '../lib-jitsi-meet';
import { MiddlewareRegistry } from '../redux';
import { CONFERENCE_FAILED, CONFERENCE_JOINED } from './actionTypes';
import './middleware.any';
declare var APP: Object;
MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
const { enableForcedReload } = getState()['features/base/config'];
switch (action.type) {
case CONFERENCE_JOINED: {
if (enableForcedReload) {
dispatch(setPrejoinPageVisibility(false));
dispatch(setPrejoinPageVisibility(PREJOIN_SCREEN_STATES.HIDDEN));
dispatch(setSkipPrejoinOnReload(false));
}

View File

@@ -50,6 +50,7 @@ export default [
*/
'callHandle',
'callStatsConfIDNamespace',
'callStatsConfigParams',
'callStatsID',
'callStatsSecret',
@@ -91,13 +92,16 @@ export default [
'disableJoinLeaveSounds',
'disableLocalVideoFlip',
'disableNS',
'disablePolls',
'disableProfile',
'disableRecordAudioNotification',
'disableRemoteControl',
'disableRemoteMute',
'disableResponsiveTiles',
'disableRtx',
'disableShortcuts',
'disableShowMoreStats',
'disableSpeakerStatsSearch',
'disableSimulcast',
'disableThirdPartyRequests',
'disableTileView',
@@ -108,11 +112,13 @@ export default [
'e2eping',
'enableDisplayNameInStats',
'enableEmailInStats',
'enableEncodedTransformSupport',
'enableIceRestart',
'enableInsecureRoomNameWarning',
'enableLayerSuspension',
'enableLipSync',
'enableOpusRed',
'enableReactions',
'enableRemb',
'enableSaveLogs',
'enableScreenshotCapture',
@@ -130,6 +136,7 @@ export default [
'forceTurnRelay',
'gatherStats',
'googleApiApplicationClientID',
'hiddenPremeetingButtons',
'hideConferenceSubject',
'hideRecordingLabel',
'hideParticipantsStats',

View File

@@ -46,3 +46,13 @@ export const TOOLBAR_BUTTONS = [
'toggle-camera',
'videoquality'
];
/**
* The toolbar buttons to show on premeeting screens.
*/
export const PREMEETING_BUTTONS = [ 'microphone', 'camera', 'select-background', 'invite', 'settings' ];
/**
* The toolbar buttons to show on 3rdParty prejoin screen.
*/
export const THIRD_PARTY_PREJOIN_BUTTONS = [ 'microphone', 'camera', 'select-background' ];

View File

@@ -33,7 +33,6 @@ export function createFakeConfig(baseURL: string) {
muc: `conference.${url.hostname}`
},
bosh: `${baseURL}http-bind`,
clientNode: 'https://jitsi.org/jitsi-meet',
p2p: {
enabled: true
}

View File

@@ -15,8 +15,8 @@ export * from './functions.any';
export function _cleanupConfig(config: Object) {
config.analytics.scriptURLs = [];
if (NativeModules.AppInfo.LIBRE_BUILD) {
delete config.analytics.amplitudeAPPKey;
delete config.analytics.googleAnalyticsTrackingId;
delete config.analytics?.amplitudeAPPKey;
delete config.analytics?.googleAnalyticsTrackingId;
delete config.callStatsID;
delete config.callStatsSecret;
}

View File

@@ -50,6 +50,7 @@ const JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP = {
}
};
const WARNING_DISPLAY_TIMER = 4000;
/**
* A listener for device permissions changed reported from lib-jitsi-meet.
@@ -133,7 +134,7 @@ MiddlewareRegistry.register(store => next => action => {
description: additionalCameraErrorMsg,
descriptionKey: cameraErrorMsg,
titleKey
}));
}, WARNING_DISPLAY_TIMER));
if (isPrejoinPageVisible(store.getState())) {
store.dispatch(setDeviceStatusWarning(titleKey));
@@ -162,7 +163,7 @@ MiddlewareRegistry.register(store => next => action => {
description: additionalMicErrorMsg,
descriptionKey: micErrorMsg,
titleKey
}));
}, WARNING_DISPLAY_TIMER));
if (isPrejoinPageVisible(store.getState())) {
store.dispatch(setDeviceStatusWarning(titleKey));

View File

@@ -50,7 +50,7 @@ class BaseDialog<P: Props, S: State> extends AbstractDialog<P, S> {
* @returns {ReactElement}
*/
render() {
const { _dialogStyles, style } = this.props;
const { _dialogStyles, style, t, titleKey } = this.props;
return (
<TouchableWithoutFeedback>
@@ -65,13 +65,18 @@ class BaseDialog<P: Props, S: State> extends AbstractDialog<P, S> {
_dialogStyles.dialog,
style
] }>
<TouchableOpacity
onPress = { this._onCancel }
style = { styles.closeWrapper }>
<Icon
src = { IconClose }
style = { _dialogStyles.closeStyle } />
</TouchableOpacity>
<View style = { styles.headerWrapper }>
<Text style = { styles.dialogTitle }>
{ titleKey ? t(titleKey) : ' ' }
</Text>
<TouchableOpacity
onPress = { this._onCancel }
style = { styles.closeWrapper }>
<Icon
src = { IconClose }
style = { _dialogStyles.closeStyle } />
</TouchableOpacity>
</View>
{ this._renderContent() }
</View>
</KeyboardAvoidingView>

View File

@@ -28,6 +28,12 @@ type Props = BaseProps & {
*/
contentKey: string | { key: string, params: Object},
/**
* The handler for the event when clicking the 'confirmNo' button.
* Defaults to onCancel if absent.
*/
onDecline?: Function,
t: Function
}
@@ -55,11 +61,11 @@ class ConfirmDialog extends BaseSubmitDialog<Props, *> {
* @inheritdoc
*/
_renderAdditionalButtons() {
const { _dialogStyles, cancelKey, t } = this.props;
const { _dialogStyles, cancelKey, onDecline, t } = this.props;
return (
<TouchableOpacity
onPress = { this._onCancel }
onPress = { onDecline || this._onCancel }
style = { [
_dialogStyles.button,
brandedDialog.buttonFarLeft,

View File

@@ -81,10 +81,20 @@ export const brandedDialog = {
},
closeWrapper: {
alignSelf: 'flex-end',
padding: BoxModel.padding
},
dialogTitle: {
fontWeight: 'bold',
paddingLeft: BoxModel.padding * 2
},
headerWrapper: {
alignItems: 'center',
flexDirection: 'row',
justifyContent: 'space-between'
},
mainWrapper: {
alignSelf: 'stretch',
padding: BoxModel.padding * 2,

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