Compare commits

...

331 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé
e89df8c346 chore(ios) sync Podfile.lock 2020-09-24 14:03:43 +02:00
Saúl Ibarra Corretgé
f4fe1a71a5 fix(ios) add local network usage description for iOS 14 2020-09-24 13:48:30 +02:00
Saúl Ibarra Corretgé
e237539197 chore(android,ios,version) bump 2020-09-24 13:45:50 +02:00
Saúl Ibarra Corretgé
c1ddd0cde7 fix(analytics) clarify log line 2020-09-24 13:42:53 +02:00
Saúl Ibarra Corretgé
b40a0ff82c fix(analytics) make handler loading more resilient
- Don't initialize handler's is their API key is not set
- Don't swallow exceptions when creating handlers
- Don't remove all handlers if an external one fails
- Dispose the analytics subsystem if no handlers are registered
2020-09-24 13:42:53 +02:00
Saúl Ibarra Corretgé
86b2425658 fix(analytics) make sure rtcstats is not enabled on mobile 2020-09-24 13:42:53 +02:00
Saúl Ibarra Corretgé
8c319dbf67 fix(analytics) avoid Amplitude initialization failure on mobile 2020-09-24 13:42:52 +02:00
Saúl Ibarra Corretgé
4e3da8e61f chore(ios,version) bump SDK 2020-09-18 11:40:39 +02:00
Saúl Ibarra Corretgé
8979352334 chore(ios) bump cocoapods version 2020-09-18 10:27:54 +02:00
Saúl Ibarra Corretgé
c0e1c277f9 chore(ios,version) bump SDK 2020-09-18 09:20:10 +02:00
Saúl Ibarra Corretgé
d895ccdeff chore(android,version) bump 2020-09-18 09:07:00 +02:00
Saúl Ibarra Corretgé
1594ae89db fix(android,calendar) avoid crash 2020-09-18 08:56:30 +02:00
Saúl Ibarra Corretgé
c4870c9159 android: fix crash when requesting permissions
The RN Permissions module calls this in a non-UI thread. What we observe is a
crash in ViewGroup.dispatchCancelPendingInputEvents, which is called on the
calling (ie, non-UI) thread. This doesn't look very safe, so try to avoid a
crash by pretending the permission was denied.
2020-09-18 08:54:02 +02:00
Hristo Terezov
fc75d45c6c feat(video-quality): add iframe event and getter. 2020-09-09 18:04:17 -05:00
Hristo Terezov
25839b18d2 feat(video-quality): persist. 2020-09-09 18:04:17 -05:00
Hristo Terezov
43f36c8cfd fix(ifarme-api): set-video-quality to use redux. 2020-09-09 18:04:17 -05:00
Hristo Terezov
b02d96231c ref(video-quality): Move all related code. 2020-09-09 18:04:17 -05:00
Дамян Минков
651d713206 feat: Allows jvb to control DTLS/SRTP protection profile. (#7626)
* feat: Allows jvb to control DTLS/SRTP protection profile.

* test: Adds dominant speaker change print for large in testing mode.
2020-09-09 16:14:53 -05:00
Saúl Ibarra Corretgé
9e5f469e0c deps: run npm audit fix
The amplitude-js dependency required a major bump.
2020-09-09 18:59:40 +02:00
Saúl Ibarra Corretgé
493ce8249e web,small-video: don't show screen content on thumbnails
This applies just to large view, not tile view.
2020-09-09 18:59:12 +02:00
Saúl Ibarra Corretgé
fdffb688c1 web,small-video: introduce screen-sharing indicator 2020-09-09 18:59:12 +02:00
Saúl Ibarra Corretgé
4807badac8 rn,thumbnail: introduce screen-sharing indicator 2020-09-09 18:59:12 +02:00
Saúl Ibarra Corretgé
5e3bd746e9 config: fix missing comma (#7667)
Fixes: https://github.com/jitsi/jitsi-meet/issues/7665
2020-09-09 07:18:54 -05:00
Jon Leren Schøpzinsky
8fa41bebb7 rn: don't start native call integration multiple times
When you join a conference that needs an authenticated moderator, as a guest, Jitsi Meet will continuously try and connect to the meeting every 5 seconds. Avoid starting the native call integration more than once.

Fixes: https://github.com/jitsi/jitsi-meet/issues/6260
2020-09-09 09:22:34 +02:00
paweldomas
cb7c280da6 fix(RN): crash on undefined state['features/dynamic-branding'] 2020-09-08 11:39:49 +02:00
emrah
0e50f1887e fix: enable token_verification during installation of jitsi-meet-tokens (#7630) 2020-09-04 10:17:54 -05:00
emrah
476ca54711 fix: keep plugin_paths while removing jitsi-meet-tokens (#7632) 2020-09-04 08:01:40 -05:00
emrah
70aa19e6d9 fix: disable token_verification while removing jitsi-meet-tokens (#7631) 2020-09-04 08:01:14 -05:00
emrah
7778a17b90 fix: added libssl1.0-dev to the dependencies of jitsi-meet-tokens (#7629) 2020-09-04 08:00:54 -05:00
Tudor-Ovidiu Avram
7ff41217ac feat(vpaas) disable deeplinking page 2020-09-03 10:45:51 -05:00
emrah
e8c44c10dd jitsi-meet-tokens: added git to the dependency list 2020-09-02 12:23:26 -05:00
damencho
b087b22d4f feat: Whitelist option to hide lobby button. 2020-09-02 11:49:15 -05:00
emrah
e988bf6565 fix: jitsi-meet-tokens - the first installation check (#7618) 2020-09-02 11:46:32 -05:00
Дамян Минков
d169bd5007 feat: Adds interface config to hide lobby button. (#7619)
* feat: Adds interface config to hide lobby button.

* squash: Moves the config to config.js and add it to mobile.
2020-09-02 10:28:22 -05:00
Boris Grozev
ac17db9df5 Update lib-jitsi-meet and add the RED option to config.js. 2020-09-01 11:49:23 -05:00
Felix C. Stegerman
322618357c jitsi-meet-tokens.postinst: fix tests 2020-09-01 07:51:37 -05:00
RabeeAbuBaker
79c1358f4b FEAT: Automatically copy invite URL after creating a room (#7581)
* Resolves #7501
- Automatically copy invite URL after creating a room

* Resolves #7501
- Automatically copy invite URL after creating a room

* - Adding config flag to enable the feature
2020-08-30 09:36:52 -05:00
Hristo Terezov
5e85b5f63a fix(close3): Add close3.js 2020-08-28 11:33:19 -05:00
vp8x8
74f7c4141f fix(vpaas): Fix billing counter auth (#7595) 2020-08-28 15:43:14 +03:00
Vlad Piersec
4866ddc2ad fix(vpaas): Fix tenant typo 2020-08-28 11:08:59 +03:00
Vlad Piersec
71d0577a49 feat(vpaas): Add endpoint counter & remove branding on vpaas meetings 2020-08-27 14:49:03 -05:00
Hristo Terezov
b7529863d5 fix(iframe-api): setDevice. 2020-08-25 18:37:03 -05:00
Hristo Terezov
4ded94d130 fix(settings): store url display name and email. 2020-08-25 18:37:03 -05:00
Jaya Allamsetty
eb8b730227 deps: update lib-jitsi-meet to latest.
Update config.js to include the new codec preference options under videoQuality settings.
2020-08-25 16:52:48 -04:00
Vlad Piersec
4bd57692b7 feat(prejoin): Show warning if audio device does not receive data 2020-08-25 11:39:59 -05:00
Aaron van Meerten
5d012c24a7 Merge pull request #7508 from abora8x8/abora/vpass
Add pre and post validation for users that want to use their own publ…
2020-08-24 09:45:21 -05:00
Vlad Piersec
4f52a29120 fix(prejoin): Make avatar resizable 2020-08-21 14:10:24 -05:00
Tudor-Ovidiu Avram
8a4fb72eae feat(branding) allow invite links to be branded 2020-08-21 11:00:12 -05:00
paweldomas
6453ceb048 ref: remove jest and lastn functions.test.js
It doesn't play well with webpack and it's babel config
and I couldn't find a way to make it work.
2020-08-21 07:38:21 -07:00
Andrei Gavrilescu
e51bbe6125 fix syntax error 2020-08-20 17:30:59 -05:00
Andrei Gavrilescu
d725c0ab8a Use rtcstats with keep-alive / add rtcstats enabled config 2020-08-20 17:30:59 -05:00
Hristo Terezov
2c2edace2a Merge pull request #7475 from vp8x8/prejoin-focus
fix(prejoin): Auto focus display name input
2020-08-20 15:28:04 -05:00
paweldomas
d3d5847605 feat: configurable quality levels for video height
Allows to adjust thresholds which control the video quality level
in the thumbnail view.

Changes the default behaviour to request the SD (360p) resolution only
when the thumbnails are at least 360 pixels tall and the height of
720 is required for the high quality level.

The thresholds can be configured with the 'videoQuality.minHeightForQualityLvl'
config property. Check the description in the config.js for more details.
2020-08-20 11:07:36 -07:00
Hristo Terezov
89ad76142d Merge pull request #7449 from muscat1/promotional-close
feat(close3): Move readyToClose flow to the close page
2020-08-20 11:48:42 -05:00
Vlad Piersec
1e76b8b6ea misc: Add test ids for prejoin buttons 2020-08-20 11:20:49 -05:00
Hristo Terezov
55175e2e95 fix(subject): set to ' ' after settings change. 2020-08-20 10:48:06 -05:00
Vlad Piersec
453c07cb17 feat(prejoin): Add precall connection quality indicator
* Adds a dropdown indicator which displays the status of the internet connection.
* It uses the same data as `https://network.callstats.io`.
* The algorithm for the strings displayed to the user is also the one used on `network.callstas.io`.
2020-08-20 08:25:15 -07:00
Andrei Bora
af71d80150 Fix call after timeout 2020-08-19 17:38:40 +03:00
Andrei Bora
b765adca75 Solve review issues and add retries for http call 2020-08-19 17:11:18 +03:00
Andrei Bora
92e6cf7618 Add pre and post validation for users that want to use their own public keys 2020-08-19 16:50:24 +03:00
Tudor-Ovidiu Avram
10c2652a4f feat(prejoin) show error when trying to join and name is required 2020-08-18 13:18:58 -05:00
Aaron van Meerten
c3329ec931 Merge pull request #7518 from jitsi/aaronkvanmeerten/jibri-queue-component-modules
FEAT: prosody jibri queue component module
2020-08-18 10:16:39 -05:00
Mihai Uscat
9cf7199c0e feat(close3): Move readyToClose flow to the close page 2020-08-18 17:31:10 +03:00
Vlad Piersec
d82bb0a89b fix(prejoin): Fix join without audio 2020-08-17 08:31:55 -05:00
Tudor-Ovidiu Avram
295dd8a45d fix(prejoin) remove version parameter 2020-08-17 10:54:22 +03:00
damencho
25ae83bcf4 fix: Fixes #7514 when promoting new moderator and lobby is enabled. 2020-08-14 17:56:24 -05:00
Aaron van Meerten
82b1408454 FEAT: jibri queue clear asap cache for token util on config reload 2020-08-14 15:24:26 -05:00
Aaron van Meerten
36565f0c50 FIX: token util keyurl definition move to above callback definition 2020-08-14 15:23:54 -05:00
Aaron van Meerten
0c48e205d7 Merge branch 'master' into aaronkvanmeerten/jibri-queue-component-modules 2020-08-14 14:21:13 -05:00
Aaron van Meerten
5e35b69fc9 FIX: prosody token util handles race on timeout gracefully 2020-08-14 14:14:29 -05:00
Aaron van Meerten
3fd85720bc FIX: prosody jibri queue component reloads configuration 2020-08-14 14:13:57 -05:00
Aaron van Meerten
e439d065b7 FEAT: token util better logging for timeouts, verification 2020-08-14 13:52:25 -05:00
Jaya Allamsetty
5dcecdbb54 deps: lib-jitsi-meet@latest 2020-08-14 12:00:09 -04:00
Niek van der Maas
8d2a52d0e8 debian: improve compressions + add expire headers
* Improve compressions + add expire headers
* Remove MSIE check, caching only for versioned files, do not gzip MP3/JPG/PNG
* Lower GZIP min length, enable compressions on WASM
2020-08-14 10:29:25 +02:00
Russell Graves
2aa6f7ff4b Add codec reporting (if present in lib-jitsi-meet output) to connection stats (#6054)
* Add codec reporting to the stats window for connections.
This will report the audio/video codecs, if reported by lib-jitsi-meet.
2020-08-13 17:56:14 -04:00
Aaron van Meerten
d716665f27 FIX: jibri-queue module log improvements 2020-08-13 16:41:42 -05:00
Дамян Минков
4ca4e242b1 ref: Moves xmpp logs to be accessed from connection. (#7517)
* ref: Moves xmpp logs to be accessed from connection.

In cases where there is no room like pre-join and lobby screen we still want to be able to debug xmpp messages.

* squash: Updates lib-jitsi-meet.
2020-08-13 13:12:56 -05:00
damencho
cdd782a82f fix: Fixes uncaught exception on malformed jwt.
Does not skip passing jwt even when malformed to allow getting the error, terminating the connection and showing the warning. We were not passing jwt when malformed and were successfully joining a conference for deployments where no token is allowed.
2020-08-13 11:00:04 -05:00
Jaya Allamsetty
713ae817c0 deps: lib-jitsi-meet@latest 2020-08-13 09:29:21 -04:00
Aaron van Meerten
d05fa32413 FIX: add flag to control whether to check room claim in JWT validation
jibri queue component stop checking room validation in token
Jibri queue component debug output when bad token is found
2020-08-12 14:43:34 -05:00
Tudor-Ovidiu Avram
e6676bb09a fix(prejoin) fix css loading path 2020-08-12 10:55:26 +03:00
Hristo Terezov
8e9a51f742 feat(Watermarks): Add deafault logo prop. 2020-08-11 18:24:44 -05:00
Aaron van Meerten
3da7798e9f FIX: prosody: output string for time and position in jibri queue 2020-08-10 15:21:56 -05:00
Aaron van Meerten
6fc9606c0d FEAT: support updating accepted issuer/aud for token lib 2020-08-10 15:21:31 -05:00
Saúl Ibarra Corretgé
004c1b65ad misc: drop babel.config.js file
This leaves jest testing non-functional, but having a babel.config.js interferes
with React Native.

Fixes: https://github.com/jitsi/jitsi-meet/issues/7450
2020-08-10 16:39:50 +02:00
Saúl Ibarra Corretgé
eabcc078ef android: fix adb reverse command in case of non-default port 2020-08-10 16:39:29 +02:00
Saúl Ibarra Corretgé
5b1f852783 rn: always reset the transform cache when starting the packager
It can help catch very weird bugs which are only triggered after a reset.
2020-08-10 16:39:29 +02:00
Saúl Ibarra Corretgé
5cf9a76f9e android: bump minimum API level to 23
Android < 23 is currently less than 3% for us so let's try to lower the
maintenance burden. Users can still download an older version no problem.
2020-08-10 16:37:20 +02:00
Saúl Ibarra Corretgé
3f33adc5d0 android: target API level 29
This will be mandatory later in the year for updating apps and it already is for
new apps.

https://support.google.com/googleplay/android-developer/answer/113469#targetsdk
2020-08-10 16:37:20 +02:00
Saúl Ibarra Corretgé
d9250aa986 android: bring back activity to the foreground when exiting PiP
When exiting PiP with by pressing the X the onPictureInPictureModeChanged method
is called. Since onResume is called a while after, in case the maximize button
is called, it's not easy to know if the user pressed the X button, and that was
the cause for exiting PiP.

So, in order to avoid show the user they are still in the meeting, bring the
activity to the foregound so they can hangup.
2020-08-10 16:36:30 +02:00
James Carbine
5b10d8f5ef Add config to hide logo-deep-linking on deeplinking page (#7346)
This adds the ability to configure hiding the logo on the deep linking page.
HIDE_DEEP_LINKING_LOGO defaults to false in the config.
The implementation also defaults to showing the logo if HIDE_DEEP_LINKING_LOGO
is missing from the config.
2020-08-10 09:30:16 -05:00
settyan117
02885ea716 lang: updated Japanese translation 2020-08-10 09:34:39 +02:00
Florian
7e70a57eb3 lang: update French translation 2020-08-10 09:33:04 +02:00
Alexey Napalkov
dbaa1168b3 lang: update Russian translation 2020-08-10 09:32:16 +02:00
Fabricio Oliveira
b1d691ca07 lang: update brazilian portuguese translation 2020-08-10 09:30:30 +02:00
Jaroslav Lichtblau
10a4612230 lang: update Czech translation 2020-08-10 09:29:42 +02:00
Aaron van Meerten
21767fa7cf Merge pull request #7481 from jitsi/aaronkvanmeerten/token-util-cache-in-object
FEAT: jwt pubkey cache inside object
2020-08-07 14:18:24 -05:00
Aaron van Meerten
0bd100f027 FIX: prosody: comment on destroy_request 2020-08-07 13:16:17 -05:00
Aaron van Meerten
f14a595462 FIX: prosody: destroy_request check 2020-08-07 13:15:55 -05:00
Hristo Terezov
5e4b8c747c feat(prejoin): Hide invite link 2020-08-07 12:28:05 -05:00
Aaron van Meerten
c4155575f9 FIX: prosody: room validation on jibri-queue
The full room JID is now passed properly to verify_token
verify_token now also expects the correct jid for validation
2020-08-07 12:10:00 -05:00
Aaron van Meerten
11ee71a51c FEAT: jwt pubkey cache inside object
Allows each module that does token validation to have its own cache
2020-08-07 11:51:44 -05:00
Mihai Uscat
c998d83f34 feat(welcome): Add variables. 2020-08-07 12:02:14 +03:00
Vlad Piersec
b670b29d7f fix(prejoin): Auto focus display name input 2020-08-07 10:27:29 +03:00
Aaron van Meerten
9b7e8c98ad FEAT: default value for jibri queue region 2020-08-06 17:12:53 -05:00
Aaron van Meerten
ad44558153 FEAT: validate keys at specific URL for jibri queue
Provide region value in POST to jibri-queue service
2020-08-06 17:12:31 -05:00
Jaya Allamsetty
1a957ed85b feat(video-quality): Impose max-bitrates on video sender based on videoQuality settings (#7467)
* feat(video-quality): Impose max-bitrates on video sender based on config.js settings
Update to lib-jitsi-meet@latest
f74cd0abe9
2020-08-06 14:24:33 -04:00
Jaya Allamsetty
1dbb47b84f deps: lib-jitsi-meet@latest 2020-08-06 08:33:28 -04:00
paweldomas
4adaa6f1fd fix(last-n-limits): crash on undefined 2020-08-06 09:02:21 +02:00
Paweł Domas
b3b561f27a feat(video quality): add maxFullResolutionParticipants (#7403)
Add a config option with the default value of 2, which will cap the max recv video quality to SD if there's more than 2 participants in the conference while in the tile view mode.
2020-08-05 10:10:14 -05:00
Jesús Espino
a6a19a3002 Fix lint error 2020-08-05 10:07:18 -04:00
Jesús Espino
1426a5b4bc Restore dots menu on mobile 2020-08-05 10:07:18 -04:00
sellth
858ee557d4 lang: update German translation 2020-08-05 09:34:15 +02:00
Jaya Allamsetty
bd64c14aaa fix: Send SS stopped analytics event when SS was started in video mute state 2020-08-04 19:30:10 -04:00
Manuel Garcia
ce286f9be8 lang: fix typo 2020-08-04 10:02:21 +02:00
Paweł Domas
cc9cb6a874 feat(config): add last N limit mapping (#7422)
Adds 'lastNLimits' config value which allows to define last N value per number of participants.
See config.js for more details.
2020-08-03 12:39:17 -05:00
Atrate
168dbd6276 android: make app movable to SD card 2020-08-03 14:50:47 +02:00
Jesús Espino
400c86ad5e Adding responsive to jitsi logo, buttons and hiding some part of the interface (#7380)
* Adding responsive to jitsi logo, buttons and hiding some part of the interface
* moving media types thresholds to variables and apply only to screen
* hide chrome extension banner on very small view
* Hide filmstrip only on desktop narrow windows
2020-07-31 07:53:19 -04:00
Matthias Wuttke
b0650b8448 Pass JWT token to close page 2020-07-31 07:47:49 +02:00
dependabot[bot]
027cc1be96 chore(deps): bump elliptic from 6.5.2 to 6.5.3
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-30 19:07:16 +02:00
ButterflyOfFire
9b32811ff2 lang: add missing kabyle language
Fixing missing kabyle language in the main file.
2020-07-29 17:05:27 +02:00
Saúl Ibarra Corretgé
a67d0fbf6c chore: remove some cycles 2020-07-29 09:31:38 +02:00
Saúl Ibarra Corretgé
af5d4c850b external_api: filter postis events origin 2020-07-28 11:36:42 +02:00
kauczu
7bfb2fc219 lang: update/fix Polish translation, add missing fields in main-pl.json (#7395)
* lang: update/fix Polish translation, add missing fields in main-pl.json

Based on actual main.json, merge #7382 and my translation.

    fixed incorrect context meaning of some fields,
    added missing fields and translated them,
    translated fields left in empty qoutes

* Update main-pl.json

* Update main-pl.json

* Update main-pl.json
2020-07-24 12:50:18 -05:00
Elliot Cooper
b814827df1 misc: replace certbot-auto with certbot 2020-07-24 16:35:52 +02:00
Bettenbuk Zoltan
240b033e76 feat: auto tile view 2020-07-24 11:06:34 +02:00
paweldomas
00b41dbb41 add mod_websocket patch for session event
It's to be used in docker-jitsi-meet to patch older
Prosody versions until this change becomes available.
2020-07-23 16:29:45 -05:00
damencho
2689be5d24 chore: Update lib-jitsi-meet. 2020-07-23 14:49:52 -05:00
damencho
f3da009d61 feat: Updates @atlaskit/flag to use the testId prop for integration tests. 2020-07-23 14:49:52 -05:00
damencho
ddc2b4f26e fix: Adds display name to notifications about lobby operations.
Display name for lobby operations notifications are taken from the list of knocking participants which is available only to moderators. In case of not all moderators the notifications were broken.
2020-07-23 14:49:52 -05:00
damencho
b106e51a10 feat: Adds id to the notifications and buttons so we can check for them in the integration tests. 2020-07-23 14:49:52 -05:00
damencho
0cef706b6a feat: Changes security dialog button to toggle dialog. 2020-07-23 14:49:52 -05:00
damencho
b9c20a3fd4 fix: Fixes syncing state about lobby in security dialog. 2020-07-23 14:49:52 -05:00
damencho
23507da59a feat: Adds id to the notifications so we can check for them in the integration tests. 2020-07-23 14:49:52 -05:00
Gabriel
4bfc80ecb9 external_api: add ability to toggle lobby 2020-07-23 16:03:53 +02:00
Saúl Ibarra Corretgé
52ce8031a3 Update react/features/chat/components/native/Chat.js 2020-07-23 15:45:30 +02:00
Saúl Ibarra Corretgé
aa9f06fa84 Update react/features/chat/components/native/Chat.js 2020-07-23 15:45:30 +02:00
Saúl Ibarra Corretgé
a758e98101 Update react/features/chat/components/native/Chat.js 2020-07-23 15:45:30 +02:00
tombrown86
63d4c2b84b onClose to return true to imply modal should close 2020-07-23 15:45:30 +02:00
tombrown86
4161e7bfe1 fix: no new msg notifications after opening chat modal [NATIVE]
call TOGGLE_CHAT action when chat modal is closed to correctly update chat isOpen state
2020-07-23 15:45:30 +02:00
Saúl Ibarra Corretgé
1c3cf325cb analytics: add app name to permanent properties 2020-07-23 15:40:02 +02:00
Saúl Ibarra Corretgé
fdbd681c8f config: fix opusMaxAverageBitrate option name
Must match the lib-jitsi-meet counterpart.

Fixes: https://github.com/jitsi/jitsi-meet/issues/7384
2020-07-23 15:14:48 +02:00
Tudor-Ovidiu Avram
f6433668d5 fix(prejoin) hide skip prejoin for exposed app 2020-07-23 13:22:28 +02:00
Tudor-Ovidiu Avram
1ae5630590 fix(prejoin) fix libs path 2020-07-23 13:22:28 +02:00
Tudor-Ovidiu Avram
b1e12d33ab feat(embed) implement embed meeting feature 2020-07-23 13:21:05 +02:00
Michał Orman
28094947a7 lang: updated Polish translations 2020-07-23 11:39:48 +02:00
Kevin Olbrich
a23dac2ab6 Add remark about focus username
https://github.com/jitsi/jitsi-meet/issues/7376
2020-07-22 19:45:12 -05:00
Aaron van Meerten
d70f9d6fd6 FIX: use correct URL paths for jibri queue service 2020-07-22 16:24:08 -04:00
Tristian Flanagan
9e7a477797 feat(blur): terminate blur web worker when disabled (#7347)
* feat(blur): terminate blur web worker when disabled
2020-07-22 10:37:17 -04:00
Tudor-Ovidiu Avram
0fc748dc44 ui: create reusable copy button 2020-07-22 15:53:43 +02:00
Saúl Ibarra Corretgé
b831bb8350 config: add roomPasswordNumberOfDigits to whitelist 2020-07-22 15:23:38 +02:00
Saúl Ibarra Corretgé
16547b91a5 rn: fix overriding user-selected server URL
Fixes: https://github.com/jitsi/jitsi-meet/issues/7373
2020-07-22 15:23:09 +02:00
Gabriel Imre
1e3e15fc72 fix: use consistent moderator semantics
Use the same moderator semantics when adding items into the remote video menu as when showing/hiding the items themselves.
2020-07-22 10:41:41 +02:00
Saúl Ibarra Corretgé
9d6e21b77b security-dialog: restore digit-only password functionality 2020-07-21 10:44:39 -05:00
Dominik Wagner
48a58f8dae ios: specify the correct keyboard type and content
This way autocomplete and keyboards work correctly.
2020-07-21 17:06:41 +02:00
Đặng Minh Tiến
eb1ef0fa9c Update JitsiStreamPresenterEffect.js (#7362)
* Update JitsiStreamPresenterEffect.js
Create/terminate the Web Worker on effect start/stop so that we don't leak them.
2020-07-21 10:01:38 -04:00
Saúl Ibarra Corretgé
eaa715879a rn: update versions 2020-07-21 15:49:08 +02:00
Saúl Ibarra Corretgé
fde7cf4ab8 chat: fix crash on mobile 2020-07-21 15:25:19 +02:00
Saúl Ibarra Corretgé
46b444c498 settings: only import required action
Fixes crash on mobile due to chained imports.
2020-07-21 15:25:19 +02:00
Saúl Ibarra Corretgé
3cbadc72a1 analytics: only import required constant 2020-07-21 15:25:19 +02:00
Saúl Ibarra Corretgé
ddaaeccafa android: disable PiP on Android Go devices
Despite running Android 8.1, they don't support Picture-in-Picture.
2020-07-21 14:03:41 +02:00
Saúl Ibarra Corretgé
0751c6ab48 ios: fix uploading dSYMs to Crashlytics
Use Fastlane to get them from Apple after processing, them upload them.

Also make sure WebRTC dSYMs are included when uploading.
2020-07-21 13:33:18 +02:00
Saúl Ibarra Corretgé
76e4929add rn,tile-view: render display name on top of participant view
Makes the tiles consistent as the participant view is equally sized and the
avatar is always centered in the tile.
2020-07-21 13:18:48 +02:00
Saúl Ibarra Corretgé
e39c8d8ed6 rn,tile-view: render a larger avatar in tile view mode 2020-07-21 13:18:48 +02:00
Aaron van Meerten
4687187cca Merge pull request #7358 from bgrozev/update-lib-jitsi-meet
chore: Update lib-jitsi-meet.
2020-07-20 13:23:37 -04:00
Aaron van Meerten
7858f12df2 FEATURE: proper outbound iq handler for REST requests 2020-07-20 12:51:07 -04:00
Boris Grozev
f2c3401a79 chore: Update lib-jitsi-meet. 2020-07-20 11:43:07 -05:00
Aaron van Meerten
828e578af4 FIX: rename disco info component to correct name
FIX: reply to iq only on successful reply from queue server
2020-07-17 16:19:25 -04:00
Saúl Ibarra Corretgé
43189f3e66 deps: lib-jitsi-meet@latest 2020-07-17 16:50:19 +02:00
Michael Telatynski
335b43036d Improve accessibility of Buttons in Webapp
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-17 16:32:33 +02:00
Vlad Piersec
b3ca51c7d0 feat(prejoin): Add settings options for prejoin page 2020-07-17 13:40:29 +03:00
Mihai Uscat
f9d545c531 feat(chat): Make chat push content to the side in tile view 2020-07-17 11:19:18 +03:00
Mihai Uscat
5f5468995f feat(chat): Make chat push content to the side in large view 2020-07-17 10:04:56 +03:00
Aaron van Meerten
4289b23135 feature: jibri queue authorization header handler 2020-07-16 22:48:52 -04:00
paweldomas
bf7aa39947 ref: one place for setting max recv frame height
Moves the logic from all different places into single state
listener to combine all inputs into a single output.
2020-07-16 10:14:59 -05:00
paweldomas
ad948bdbe2 feat(StateListenerRegistry): add 'deepEquals' option
Adds an extra 'options' argument to the register method which
allows to use deep equality instead of a shallow one when comparing
the current and the previous selections.
2020-07-16 10:14:59 -05:00
Gabriel Imre
29366a0029 feat: add test hint for grant moderator availability 2020-07-16 13:54:03 +02:00
dependabot[bot]
0bec7c7ab7 chore(deps): bump lodash from 4.17.13 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.13 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.13...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-16 09:41:38 +02:00
Andrei Gavrilescu
29805edd02 feat(rtcstats): Integrate rtcstats (#6945)
* Integrate rtcstats

* expcetion handling / clean up

* order imports

* config fix

* remove mock amplitude handler

* additional comments

* lint fix

* address code review

* move rtcstats middleware

* link to jitsi rtcstats package

* address code review

* address code review / add ws onclose handler

* add display name / bump rtcstats version

* resolve import error
2020-07-15 18:22:00 +03:00
George Politis
11fd5363ce fix: Avoid overwriting the max resolution requested by the tile-view. (#7320)
Part of [1] replaces a `setPreferredVideoQuality` call with a
`setMaxReceiverVideoQuality` call. The change was part of a bigger
changeset that adds logic that tries to adjust the max based on reduced
ui turned on or off and allow to set prefered through the config.

However, by calling `setMaxReceiverVideoQuality` instead of
`setPreferredVideoQuality`, the new feature overrides the lower
resolution requested by tile-view earlier in some occasions.

This PR reverts back to using `setPreferredVideoQuality` instead of
`setMaxReceiverVideoQuality` as this achieves the same result without
overwriting the max set by the tile-view.

NOTE that this is a quick-fix and all the handling related to setting
the receive resolution will be reworked soon.

[1]: 7d513738d2
2020-07-15 15:55:30 +02:00
Tudor-Ovidiu Avram
1790c71c80 fix(disconnect) Fix quick disconnect errors 2020-07-15 15:32:56 +02:00
Saúl Ibarra Corretgé
36d95ed51f rn,conference: show lonely experience only after joining
Showing the modal earlier is weird because it will be closed as soon as we
connect. Also, we don't know if we are going to be alone until we join.
2020-07-15 15:32:34 +02:00
Vlad Piersec
ef0af1a8c0 fix(prejoin): Show decoded version of meeting uri 2020-07-15 13:21:36 +02:00
Gabriel Imre
b85cd2348f feat: add grant moderator functionality 2020-07-15 12:13:28 +02:00
Vlad Piersec
035f720a50 feat(prejoin): Add 'skip prejoin' button 2020-07-15 11:36:37 +02:00
yuriikaidan
c8444a9a0d lang: update Polish translation 2020-07-15 11:05:50 +02:00
utkarshmarwaha
7f5751b918 rn,flags: add flag to show/hide video share button 2020-07-15 10:48:56 +02:00
Dan Dascalescu
fc6bd3667c config: fix typo 2020-07-15 10:44:40 +02:00
Ivy
2c42dd0773 lang: update Japanese 2020-07-15 10:44:04 +02:00
vp8x8
1891ce0b24 fix(prejoin): Align avatar image on small screens (#7300)
Fixes: #7296
2020-07-15 10:43:00 +02:00
Mutusen
e34c5673b2 lang: update Esperanto translation 2020-07-15 10:24:10 +02:00
NicolasD
41ba55a6a9 rn,flags: add feature flag to enable / disable conference timer 2020-07-15 10:22:35 +02:00
Aaron van Meerten
099820b6ac prosody modules: jibri queue events for leave, room destroyed 2020-07-14 16:50:34 -04:00
Aaron van Meerten
25ded0bdeb prosody modules: add util function for rewritesplit JID 2020-07-14 16:49:51 -04:00
Дамян Минков
758b60f92b fix: Updates coturn config on update. (#7306)
* fix: Updates coturn config on update.

* fix: Updates console message.
2020-07-14 13:16:53 -05:00
paweldomas
fcc69b92bb deps: update LJM to bring in new audio levels and e2ee tweaks
Updates LJM to ff1813cbb2e7d36f1cc0bbc2b8baa0a16c6346a4
2020-07-14 12:01:18 -05:00
Julian Vos
a697caea03 lang: update Dutch translation 2020-07-14 13:42:03 +02:00
Aaron van Meerten
51fd10278b FIX: prosody jibri queue handle iq properly 2020-07-13 18:04:48 -04:00
abora8x8
5b89709483 Add hook for creating lobby before participants join (#7273)
* Add hook for create lobby

* Remove duplicated code
2020-07-13 11:29:35 -05:00
George Politis
e4ce3928dc feat: Exposes the max enabled resolution in the connection stats popover. (#7278)
* feat: Exposes the max enabled resolution in the connection stats popover.
* deps: lib-jitsi-meet@latest
2020-07-13 17:20:59 +02:00
plokta
b0188a7184 config: Add option to set preferred audio bitrate. (#7072)
The maxaveragebitrate parameter to be used by Opus can be configured
through the new opusMaxAvgBitrate config option. Values are restricted
by Opus to integers between 6000 to 510000. Works for non-p2p only.

move option to Audio section, add documentation

Co-authored-by: plokta <dev@plokta.eu>
2020-07-11 10:33:49 +02:00
Saúl Ibarra Corretgé
53281c2d42 analytics: avoid error log when there are no handlers 2020-07-10 17:55:18 +02:00
damencho
3da1b65757 fix: Fixes import of moved function. 2020-07-10 08:22:22 -05:00
Tudor-Ovidiu Avram
0e5091adba feat(prejoin) Expose prejoin app 2020-07-10 14:24:06 +02:00
Tudor-Ovidiu Avram
f376542441 feat(prejoin) cache media start options when on prejoin screen 2020-07-10 14:24:06 +02:00
Mihai Uscat
bd65108692 fix(SecurityDialog): Fix password action spacing 2020-07-10 13:26:48 +02:00
Saúl Ibarra Corretgé
546b0abe32 misc: add script to update LJM to the latest commit 2020-07-10 12:44:29 +02:00
Saúl Ibarra Corretgé
62ad7d3451 deps: lib-jitsi-meet@latest 2020-07-10 11:31:34 +02:00
ALAGBE Sola
5bc3128c71 config: fix typo 2020-07-10 11:10:19 +02:00
Saúl Ibarra Corretgé
b91d6b97a9 deps: jitsi/js-utils@1.0.0 2020-07-10 10:38:49 +02:00
Saúl Ibarra Corretgé
ce812591f9 conference: fix not applying max recv constraints
They also need to be applied when changing conferences.
2020-07-09 08:40:56 +02:00
Saúl Ibarra Corretgé
f32140c4b7 rn: set default resolution to 360p (experiment) 2020-07-09 08:40:56 +02:00
Saúl Ibarra Corretgé
7d513738d2 rn,flags: add ability to override resolution using a flag
Also, use the configured resolution to set it as the max received frame size.
2020-07-09 08:40:56 +02:00
Jaya Allamsetty
8d1bde3cb1 chore(deps): update lib-jitsi-meet to latest 2020-07-08 14:43:24 -04:00
Saúl Ibarra Corretgé
95825dcdd7 config: add flag to disable the E2EE support
This is useful for testing insertable streams related issues.
2020-07-08 17:19:36 +02:00
Saúl Ibarra Corretgé
a61f272303 deps: lib-jitsi-meet@latest 2020-07-08 17:19:36 +02:00
Vlad Piersec
3538761543 fix(prejoin): Don't add video track to connection on start if video muted 2020-07-08 15:58:13 +03:00
motiwardi
f22d5ed629 android: added configuration for user CA root trust 2020-07-08 14:50:56 +02:00
Saúl Ibarra Corretgé
f30dd9d881 deps: react-native-webrtc@1.84.0 2020-07-08 14:17:06 +02:00
Florian
4a3cd2596a Update main-fr.json
Translation 'prejoin'
2020-07-08 07:09:39 -05:00
Maxence Dalmais
4e1f42a665 Update mod_muc_poltergeist.lua
Add avatar to user context so it is picked by the web interface
2020-07-08 07:08:50 -05:00
Florian
1fff5d2567 Update main-fr.json
Some translations for "invite"
2020-07-07 10:48:53 -05:00
Florian
bbcc40a97e Update main-fr.json
Translate for "Add" in security option
2020-07-07 10:47:52 -05:00
Florian
bbf76296ed Update KnockingParticipantList.js
In order to translate the title.. Pull request #7246
2020-07-07 08:55:03 -05:00
Florian
e0b3a81a41 Update main-fr.json
Fix translate FR and add "Security" translations
2020-07-07 08:41:41 -05:00
Florian
1c122705bf Update main.json with missing KnockingParticipantList string (#7246)
Adding future translation possibilities
2020-07-07 08:40:18 -05:00
Frank de Lange
29c16e42bd Move STUN/TURN to IANA-assigned ports - 3478 and 5349 (TLS) (#6172)
* Move STUN/TURN to IANA-assigned ports - 3478 and 5349 (TLS)

* Change remaining references to TURNS port from 4445 to 5349

* Change back TURNS to 443
2020-07-07 08:14:28 -05:00
Cem Ibrahim ARI
8a19a34d19 fixed non valid json turkish language file 2020-07-07 08:00:25 -05:00
Tudor-Ovidiu Avram
d5832f226d fix(dialout) whitelist dialout flag 2020-07-07 11:00:49 +02:00
Saúl Ibarra Corretgé
4cfc8cd7a2 deps: update clean-css (reland)
Fix the incorrect paths (was a breaking change in version 4) by using the
`--skip-rebase` cli option.
2020-07-06 21:16:14 +02:00
Bettenbuk Zoltan
873ede0e06 feat: lobby related notifications 2020-07-06 17:31:16 +02:00
damencho
f73e9947c0 fix: Uses room jids for the lobby notifications. 2020-07-06 09:56:01 -05:00
Saúl Ibarra Corretgé
82711b3f23 Merge pull request #7226 from saghul/update-turn-cfg
turn: update default coturn configuration
2020-07-03 20:15:12 +02:00
Saúl Ibarra Corretgé
2f841fab73 turn: update default coturn configuration 2020-07-03 17:36:04 +02:00
Дамян Минков
b3a2905849 feat: Sends json messages notifying for lobby actions. (#7209)
* feat: Sends json messages notifying for lobby actions.

* squash: Fixes quotes to be consistent.

* fix: Fixes attempt to call global 'formdecode' (a nil value).
2020-07-03 08:26:44 -05:00
Vlad Piersec
5f579e9a15 fix(prejoin): Make display name mandatory only for lobby
A user should not be forced to enter a display name if the lobby is not enabled
for the room.
2020-07-03 16:13:54 +03:00
Vlad Piersec
ea2ea89ef7 fix(prejoin): dialout popup buttons 2020-07-03 11:49:25 +03:00
Vlad Piersec
a5f17a8033 feat(prejoin): Show avatar image on prejoin screen 2020-07-03 11:41:19 +03:00
Florian
4c6e9e7788 lang: update French translation 2020-07-03 10:36:58 +02:00
Saúl Ibarra Corretgé
a7e0df2623 toolbox: fix missing key prop
Fixes a React warning.
2020-07-03 10:35:35 +02:00
Hristo Terezov
da9a70129e Revert: clean-css update due to broken paths. 2020-07-02 15:30:15 -05:00
damencho
6d3d15a64b feat: Adds an option to validate a recording token. 2020-07-02 12:51:14 -05:00
damencho
b10a45bf98 fix: Fixes generating self-signed certificate.
The wrong quotes error:
req: Error on line 354 of config file "/dev/fd/63"
Error Loading extension section SAN
140403719438784:error:0E06C069:configuration file routines:NCONF_get_section:no conf:../crypto/conf/conf_lib.c:245:

Having the ip and specifying dns:
Error Loading extension section SAN
140127168778688:error:220A4076:X509 V3 routines:a2i_GENERAL_NAME:bad ip address:../crypto/x509v3/v3_alt.c:457:value=jitsi.example.com
140127168778688:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:../crypto/x509v3/v3_conf.c:47:name=subjectAltName, value=DNS:localhost,DNS:jitsi.example.com,IP:jitsi.example.com
2020-07-02 10:33:09 -05:00
paweldomas
858a3d953c deps: LJM e66cc365014cd429280a95a379ad62d993217f6b
Update lib-jitsi-meet which adds the setNetworkInfo method.
2020-07-01 19:31:48 -05:00
paweldomas
1ff27b7298 fix: store.getState() called while the reducer is executing 2020-07-01 19:31:48 -05:00
paweldomas
bc43f00d28 feat: pass network info to LJM 2020-07-01 19:31:48 -05:00
Imre Faragó
bfd5db355d prosody muc_size plugin, room get info error fix (Traceback[httpserver]: /usr/lib/prosody/util/async.lua:137: /prosody-plugins/mod_muc_size.lua:141: attempt to concatenate local 'subdomain' (a nil value) 2020-07-01 08:04:41 -05:00
Дамян Минков
a4ca247056 Lobby required displayname (#7197)
* ref: Rename jitsi_bosh_query_room to jitsi_web_query_room.

This is no longer bosh only and is available for both bosh and websocket sessions.

* feat: Adds feature to disco-info indicating that display name is required.

* feat: Adds option to disable checking whether display name is required.

* ref: Clears auth_token when verification fails.

* squash: Fixing comments.

* squash: Updates to latest lib-jitsi-meet.
2020-06-30 08:15:08 -05:00
Quentí
eac891585b lang: update Occitan 2020-06-30 15:02:16 +02:00
Bettenbuk Zoltan
7d62020787 feat: add moderated service link to welcome page 2020-06-30 12:39:46 +02:00
Saúl Ibarra Corretgé
7d18183bf9 deps: css-loader@3.6.0 2020-06-30 11:27:39 +02:00
Saúl Ibarra Corretgé
346dac476a deps: clean-css@4.3.0 2020-06-30 11:27:39 +02:00
Saúl Ibarra Corretgé
b4ecef429a doc: add H1 to SECURITY.md 2020-06-30 09:07:57 +02:00
Dan Dascalescu
ea07515138 docs: improve English in config.js 2020-06-30 09:07:25 +02:00
Dan Dascalescu
79231914b9 docs: fix typo in interface_config.js 2020-06-30 09:06:38 +02:00
Jaya Allamsetty
0e1ecd3256 fix: disable audio/video settings popup on mobile browsers
Mobile devices do not support capture from multiple cameras/mics at a time.
2020-06-30 08:58:36 +02:00
Dan Dascalescu
0d15c01077 doc: TOOLBAR_BUTTONS clarifications 2020-06-30 08:57:25 +02:00
Aaron Van Meerten
24c75b7332 FIX: better URL handler for jibri queue events 2020-06-29 18:46:15 -05:00
Aaron Van Meerten
2327a6d0b4 FEATURE: prosody: add http handler for jibri queue 2020-06-29 18:20:04 -05:00
Aaron Van Meerten
b94c357cc2 WIP: jibri queue component prosody modules 2020-06-29 18:11:41 -05:00
Jaya Allamsetty
216801720a chore(deps): update lib-jitsi-meet 2020-06-29 12:31:11 -04:00
Samuel Retika
312813e677 Adding isSharingScreen() to external API 2020-06-29 11:24:45 -04:00
Vlad Piersec
2b5787163e fix(prejoin): Replace the stored audio/video tracks when device list changes
When on prejoin screen, if the device list changes (devices are added or removed),
the newly created tracks do not properly replace the old ones, resulting in
errors after joining the meeting and trying to change the devices.
This change fixes the problem.
2020-06-29 12:26:55 +02:00
Dan Dascalescu
28632752ba docs: fix typo in interface_config.js 2020-06-26 23:02:56 +02:00
Selyan Slimane Amiri
7dfff1b455 Add translations in language and main files. (#7023)
* Update languages-kab.json

* Update main-kab.json

* Update main-kab.json

* Update main-kab.json

* Add kab entry in languages-kab.json
2020-06-26 11:45:26 -05:00
Vlad Piersec
99e7d636b7 fix(settings): Always show mic audio levels 2020-06-26 07:57:20 -04:00
Roman
4b1743bb2f android: add serverURL configuration for MDM/EMM environments
Android for Enterprise provides special feature for applications to obtain configuration through RestrictionManager remotely by some MDM solution.

Jitsi Meet can be remotely installed and provisioned with a proper URL (making URL not editable by the user) inside the Work Profile or Fully managed device.
2020-06-26 11:47:48 +02:00
Vlad Piersec
3b1ad9faff fix: Show audio/video options on lobby screen 2020-06-26 11:29:20 +02:00
Vlad Piersec
87b14c3711 fix(prejoin): copy meeting info 2020-06-26 11:28:49 +02:00
Titus-Andrei Moldovan
5811e0476c rn: fixes the bug on shared video not stopping when the user leaves the conferences 2020-06-26 10:54:49 +02:00
Titus-Andrei Moldovan
59750ba1f1 rn: refactors the YoutubeLargeVideo to be class component. Adds interval for sending the seek time every 5 seconds. 2020-06-26 10:54:49 +02:00
pierretux
b3de7fd52b lang: update French translation 2020-06-26 10:31:38 +02:00
Bettenbuk Zoltan
f68b9b7df9 fix: different description for non moderator participants in passcode dialog 2020-06-25 17:36:39 +02:00
Bettenbuk Zoltan
b534c4f624 ui: making the security menu more compact 2020-06-25 17:36:39 +02:00
Mihai Uscat
ab1c5805f4 feat(AddPeopleDialog): Enable contact invitation based on interfaceConfig flag 2020-06-25 10:36:02 -05:00
Bettenbuk Zoltan
0c6b0641f5 fix: layout of the insecure room name warning icon 2020-06-25 17:23:27 +02:00
Mihai Uscat
093254d948 fix(AddPeopleDialog): Improve contact invite form
- Disables the invite buttons while invites are ongoing
- Adds a keyboard shortcut (Enter) to send out invites
- Closes AddPeopleDialog upon successful invites sent
- Fixes the SecurityDialog closing when trying to set E2EE key via Enter shortcut
- Removes superfluous separator from SecurityDialog
2020-06-25 15:25:15 +02:00
Bettenbuk Zoltan
0494200383 fix: label tooltips are not visible in tile view 2020-06-25 14:05:34 +02:00
Saúl Ibarra Corretgé
16f1c167b8 interface_config: bring back config trailer 2020-06-23 21:00:27 +02:00
Saúl Ibarra Corretgé
97fd36a19a debian: fix postinst command 2020-06-23 17:46:44 +02:00
damencho
701d34248b fix: Fixes showing cc button when jwt is not used.
Fixes #7093.
2020-06-23 08:31:37 -05:00
Florian
e72dae5c32 lang: update French translation 2020-06-23 14:51:13 +02:00
paweldomas
811ee40d99 ref(constants): use 720 for the high quality level
720 is requested by default for the local video stream
and when using the quality slider the resolution would
be increased to 1080.

Note that this will limit the receive quality to 720 as well,
because both send and receive constraints are changed at
the same time when the quality slider is used.
2020-06-23 14:50:00 +02:00
egerardus
76eabf1f29 debian: add SAN when generating self-signed certs
Closes: #5547
2020-06-23 14:47:36 +02:00
Vangelis Zacharioudakis
01a8cc1478 lang: update Greek translation 2020-06-23 14:34:49 +02:00
Vlad Piersec
047c9b43ea fix: welcome page logo not being displayed 2020-06-23 10:29:41 +02:00
Dan Dascalescu
22d040ab76 doc: point to the Handbook repo 2020-06-23 09:39:14 +02:00
Hristo Terezov
4ac9ea258c ref(interfaceConfig): Order alphabetically. 2020-06-22 14:25:48 -05:00
Hristo Terezov
6bd64ee552 fix(jitsi-logo): URL 2020-06-22 13:28:52 -05:00
Jaya Allamsetty
7a1595f162 chore(deps): update lib-jitsi-meet 2020-06-20 08:49:19 -04:00
Jaya Allamsetty
07cad2a98f cleanup: Remove obsolete code related to SS extension
- Remove external install dialogs and fix related screensharing error handling.
- Remove obsolete options from config.js and from configWhitelist.js
2020-06-20 08:49:19 -04:00
Дамян Минков
6fbba52c6d feat: Adds a new option to disable lobby for guests. (#7094)
* feat: Adds a new option to disable lobby for guests.

* squash: Rename config option.

* squash: Comment update.
2020-06-19 14:50:31 -05:00
Gonçal
311d1c67ba Added all missing languages from languages.json
Added all missing languages from languages.json, with names in Catalan
2020-06-19 13:39:39 -05:00
Vlad Piersec
0aa54d8650 (prejoin): fix mobile 2020-06-19 16:46:43 +02:00
Bettenbuk Zoltan
74e0e10928 feat: new security icon 2020-06-19 12:25:24 +02:00
Vlad Piersec
4f169988a3 fix(prejoin): Store prejoin tracks in 'features/base/tracks' 2020-06-19 12:02:11 +02:00
Joey Marshment-Howell
ec6ed6e8ec config: whitelist option to hide chrome extension banner
saghul: torture tests also need it.
2020-06-19 09:15:10 +02:00
Aaron van Meerten
7b429afee6 Merge pull request #7080 from jitsi/fix-e2ee
fix(e2ee): hide if not supported.
2020-06-18 13:14:35 -05:00
Hristo Terezov
cab830aad1 fix(e2ee): hide if not supported. 2020-06-18 12:25:49 -05:00
Jaya Allamsetty
bd42c81cb8 chore(deps): Update lib-jitsi-meet 2020-06-18 11:51:28 -04:00
Saúl Ibarra Corretgé
f230fd4d04 subject: avoid sending an extra empty subject update
When setSubject is called too early we store it as pensing, but thanks to the
default parameter value, if undefined is passed to the function we'll store the
empty string.

This will trigger a needless update because undefined !== ''.
2020-06-18 14:52:17 +02:00
Saúl Ibarra Corretgé
eed57e7999 subject: only try to update the subject when the rol;e changes
Skip processing any other participant updates.
2020-06-18 14:52:17 +02:00
Vlad Piersec
8115f86f59 fix(prejoin): Fix CSS for prejoin page according to design 2020-06-18 14:43:37 +02:00
Bettenbuk Zoltan
28e5edfb50 ref: move e2ee field into security menu 2020-06-18 09:36:24 +02:00
Saúl Ibarra Corretgé
e936c6dc2c lang: improve wording 2020-06-17 20:35:57 +02:00
Saúl Ibarra Corretgé
8efd0f0829 unsafe-room: hide unsafe room label if a password or lobby are set 2020-06-17 20:35:57 +02:00
Saúl Ibarra Corretgé
a49f04f25b config: document enableInsecureRoomNameWarning and whitelist it 2020-06-17 20:35:57 +02:00
Bettenbuk Zoltan
bcffe0bba5 fix: lobby screen broken with prejoin disabled 2020-06-17 09:01:55 -05:00
Titus-Andrei Moldovan
482ba23954 rn: adds support for mobile youtube link 2020-06-17 15:10:54 +02:00
Titus-Andrei Moldovan
e87167dd2d rn: fixes the propagation of the paused event after the status was set to stop 2020-06-17 15:10:54 +02:00
erickvils
cf047a3c90 lang: update portuguese (BR) translation 2020-06-17 08:41:53 +02:00
Saúl Ibarra Corretgé
a8b8612304 rn,auth: trim the username
Fixes: https://github.com/jitsi/jitsi-meet/issues/5673
2020-06-17 08:39:58 +02:00
Saúl Ibarra Corretgé
95a5b8a8c1 rn,auth: don't auto-capitalize the password field
Fixes: https://github.com/jitsi/jitsi-meet/issues/5673
2020-06-17 08:39:58 +02:00
bgrozev
5867eaf560 config: remove obsolete options 2020-06-17 08:39:31 +02:00
Hafize Güngör
9143bb42d1 lang: fixes for Turkish translation 2020-06-17 08:37:43 +02:00
Boris Grozev
0e5dac623e chore: Update lib-jitsi-meet. 2020-06-16 16:59:21 -05:00
Boris Grozev
0c09ded76b feat: Add and whitelist the useTurnUdp config option. 2020-06-16 16:59:21 -05:00
damencho
929622b27c fix: Fixes setting subject from url.
There are occasions when role to moderator can change a little bit after joining the room, and initial try to set subject will silently be ignored if not moderator.
2020-06-16 12:44:44 -05:00
damencho
430125a8bd feat: Adds user props to analytics for iframe and external api. 2020-06-16 12:44:36 -05:00
damencho
66505666df feat: Hide Invite more when invite button is disabled. 2020-06-16 08:41:55 -05:00
Saúl Ibarra Corretgé
e5cffc71c4 config: cleanup no longer used interface_config options 2020-06-16 14:59:04 +02:00
Adam Wan
e3d66db3d7 config: add ability to hide the "invite more" header button 2020-06-16 13:07:37 +02:00
Saúl Ibarra Corretgé
e8e2b3c341 doc,gh: add pull request template 2020-06-16 11:24:15 +02:00
Saúl Ibarra Corretgé
abb724e173 doc: update CONTRIBUTING 2020-06-16 11:24:15 +02:00
Saúl Ibarra Corretgé
6e679f952f redux: refactor loading of middlewares and reducers
Up until now we relied on implicit loading of middlewares and reducers, through
having imports in each feature's index.js.

This leads to many complex import cycles which result in (sometimes) hard to fix
bugs in addition to (often) breaking mobile because a web-only feature gets
imported on mobile too, thanks to the implicit loading.

This PR changes that to make the process explicit. Both middlewares and reducers
are imported in a single place, the app entrypoint. They have been divided into
3 categories: any, web and native, which represent each of the platforms
  respectively.

Ideally no feature should have an index.js exporting actions, action types and
components, but that's a larger ordeal, so this is just the first step in
getting there. In order to both set example and avoid large cycles the app
feature has been refactored to not have an idex.js itself.
2020-06-16 11:24:15 +02:00
Saúl Ibarra Corretgé
80d7e5fb7f redux: move PersistenceRegistry to the redux feature 2020-06-16 11:24:15 +02:00
Saúl Ibarra Corretgé
7646618e5a rnnoise: simplify initialization 2020-06-16 10:49:33 +02:00
Jaya Allamsetty
6533071c4c chore(deps): update lib-jitsi-meet
Update to sdp-interop@1.0.3 for getting the fix for Firefox RTX audio-only issue
2020-06-15 11:22:29 -04:00
Emil Ivov
6aed9bc0c8 interface_config: enforce logo by default 2020-06-12 17:38:51 +02:00
Jaya Allamsetty
b7b861259b fix(UI): add playsinline attr for video element
> playinline attr needs to be set to true to stop local video from playing in full screen mode in Safari on iOS.
> This applies to the local video thumbnails and the camera previews from the device selection menu and video preview button
2020-06-12 09:30:46 -04:00
tmoldovan8x8
df64dd8f18 rn: add youtube player for mobile app 2020-06-12 12:15:16 +02:00
527 changed files with 12077 additions and 5971 deletions

5
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,5 @@
<!--
Thank you for your pull request. Please provide a thorough description below.
Contributors guide: https://github.com/jitsi/jitsi-meet/blob/master/CONTRIBUTING.md
-->

1
.gitignore vendored
View File

@@ -84,3 +84,4 @@ android/app/google-services.json
ios/app/dropbox.key
ios/app/GoogleService-Info.plist
.vscode

View File

@@ -123,3 +123,32 @@ in the agreement, unfortunately, we cannot accept your contribution.
respective variable, function, property is non-public i.e. private, protected,
or internal. In contrast, the lack of an underscore at the beginning of a name
signals public API.
### Feature layout
When adding a new feature, this would be the usual layout.
```
react/features/sample/
├── actionTypes.js
├── actions.js
├── components
│   ├── AnotherComponent.js
│   ├── OneComponent.js
│   └── index.js
├── middleware.js
└── reducer.js
```
The middleware must be imported in `react/features/app/` specifically
in `middlewares.any`, `middlewares.native.js` or `middlewares.web.js` where appropriate.
Likewise for the reducer.
An `index.js` file must not be provided for exporting actions, action types and
component. Features / files requiring those must import them explicitly.
This has not always been the case and the entire codebase hasn't been migrated to
this model but new features should follow this new layout.
When working on an old feature, adding the necessary changes to migrate to the new
model is encouraged.

View File

@@ -51,6 +51,8 @@ deploy-appbundle:
$(BUILD_DIR)/video-blur-effect.min.map \
$(BUILD_DIR)/rnnoise-processor.min.js \
$(BUILD_DIR)/rnnoise-processor.min.map \
$(BUILD_DIR)/close3.min.js \
$(BUILD_DIR)/close3.min.map \
$(DEPLOY_DIR)
deploy-lib-jitsi-meet:
@@ -74,7 +76,7 @@ deploy-rnnoise-binary:
deploy-css:
$(NODE_SASS) $(STYLES_MAIN) $(STYLES_BUNDLE) && \
$(CLEANCSS) $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
$(CLEANCSS) --skip-rebase $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
rm $(STYLES_BUNDLE)
deploy-local:
@@ -82,7 +84,7 @@ deploy-local:
.NOTPARALLEL:
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-lib-jitsi-meet deploy-libflac
$(WEBPACK_DEV_SERVER)
$(WEBPACK_DEV_SERVER) --detect-circular-deps
source-package:
mkdir -p source_package/jitsi-meet/css && \

View File

@@ -1,9 +1,9 @@
# Security
## Reporting security issuess
## Reporting security issues
We take security very seriously and develop all Jitsi projects to be secure and safe.
If you find (or simply suspect) a security issue in any of the Jitsi projects, please send us an email to security@jitsi.org.
If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8) or send us an email to security@jitsi.org.
**We encourage responsible disclosure for the sake of our users, so please reach out before posting in a public space.**

View File

@@ -1,12 +1,16 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="org.jitsi.meet">
package="org.jitsi.meet"
android:installLocation="auto">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">
<meta-data
android:name="android.content.APP_RESTRICTIONS"
android:resource="@xml/app_restrictions" />
<activity
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"

View File

@@ -16,9 +16,14 @@
package org.jitsi.meet;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.RestrictionEntry;
import android.content.RestrictionsManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.KeyEvent;
@@ -31,6 +36,7 @@ import org.jitsi.meet.sdk.JitsiMeetConferenceOptions;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.Map;
/**
@@ -48,6 +54,27 @@ public class MainActivity extends JitsiMeetActivity {
private static final int OVERLAY_PERMISSION_REQUEST_CODE
= (int) (Math.random() * Short.MAX_VALUE);
/**
* ServerURL configuration key for restriction configuration using {@link android.content.RestrictionsManager}
*/
public static final String RESTRICTION_SERVER_URL = "SERVER_URL";
/**
* Broadcast receiver for restrictions handling
*/
private BroadcastReceiver broadcastReceiver;
/**
* Flag if configuration is provided by RestrictionManager
*/
private boolean configurationByRestrictions = false;
/**
* Default URL as could be obtained from RestrictionManager
*/
private String defaultURL;
// JitsiMeetActivity overrides
//
@@ -68,7 +95,7 @@ public class MainActivity extends JitsiMeetActivity {
// In Debug builds React needs permission to write over other apps in
// order to display the warning and error overlays.
if (BuildConfig.DEBUG) {
if (canRequestOverlayPermission() && !Settings.canDrawOverlays(this)) {
if (!Settings.canDrawOverlays(this)) {
Intent intent
= new Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
@@ -85,16 +112,67 @@ public class MainActivity extends JitsiMeetActivity {
@Override
protected void initialize() {
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// As new restrictions including server URL are received,
// conference should be restarted with new configuration.
leave();
recreate();
}
};
registerReceiver(broadcastReceiver,
new IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED));
resolveRestrictions();
setJitsiMeetConferenceDefaultOptions();
super.initialize();
}
@Override
public void onDestroy() {
if (broadcastReceiver != null) {
unregisterReceiver(broadcastReceiver);
broadcastReceiver = null;
}
super.onDestroy();
}
private void setJitsiMeetConferenceDefaultOptions() {
// Set default options
JitsiMeetConferenceOptions defaultOptions
= new JitsiMeetConferenceOptions.Builder()
.setWelcomePageEnabled(true)
.setServerURL(buildURL("https://meet.jit.si"))
.setFeatureFlag("call-integration.enabled", false)
.build();
.setWelcomePageEnabled(true)
.setServerURL(buildURL(defaultURL))
.setFeatureFlag("call-integration.enabled", false)
.setFeatureFlag("resolution", 360)
.setFeatureFlag("server-url-change.enabled", !configurationByRestrictions)
.build();
JitsiMeet.setDefaultConferenceOptions(defaultOptions);
}
super.initialize();
private void resolveRestrictions() {
RestrictionsManager manager =
(RestrictionsManager) getSystemService(Context.RESTRICTIONS_SERVICE);
Bundle restrictions = manager.getApplicationRestrictions();
Collection<RestrictionEntry> entries = manager.getManifestRestrictions(
getApplicationContext().getPackageName());
for (RestrictionEntry restrictionEntry : entries) {
String key = restrictionEntry.getKey();
if (RESTRICTION_SERVER_URL.equals(key)) {
// If restrictions are passed to the application.
if (restrictions != null &&
restrictions.containsKey(RESTRICTION_SERVER_URL)) {
defaultURL = restrictions.getString(RESTRICTION_SERVER_URL);
configurationByRestrictions = true;
// Otherwise use default URL from app-restrictions.xml.
} else {
defaultURL = restrictionEntry.getSelectedString();
configurationByRestrictions = false;
}
}
}
}
@Override
@@ -107,8 +185,7 @@ public class MainActivity extends JitsiMeetActivity {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == OVERLAY_PERMISSION_REQUEST_CODE
&& canRequestOverlayPermission()) {
if (requestCode == OVERLAY_PERMISSION_REQUEST_CODE) {
if (Settings.canDrawOverlays(this)) {
initialize();
return;
@@ -131,6 +208,18 @@ public class MainActivity extends JitsiMeetActivity {
return super.onKeyUp(keyCode, event);
}
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
Log.d(TAG, "Is in picture-in-picture mode: " + isInPictureInPictureMode);
if (!isInPictureInPictureMode) {
this.startActivity(new Intent(this, getClass())
.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
}
}
// Helper methods
//
@@ -141,10 +230,4 @@ public class MainActivity extends JitsiMeetActivity {
return null;
}
}
private boolean canRequestOverlayPermission() {
return
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.M;
}
}

View File

@@ -1,3 +1,5 @@
<resources>
<string name="app_name">Jitsi Meet</string>
<string name="restriction_server_url_description">URL of Jitsi Meet server instance to connect to</string>
<string name="restriction_server_url_title">Server URL</string>
</resources>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Server URL configuration -->
<restriction
android:defaultValue="https://meet.jit.si"
android:description="@string/restriction_server_url_description"
android:key="SERVER_URL"
android:restrictionType="string"
android:title="@string/restriction_server_url_title"/>
</restrictions>

View File

@@ -1,6 +1,12 @@
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">localhost</domain>
<domain includeSubdomains="false">10.0.2.2</domain>
</domain-config>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">localhost</domain>
<domain includeSubdomains="false">10.0.2.2</domain>
</domain-config>
</network-security-config>

View File

@@ -142,10 +142,10 @@ allprojects {
}
ext {
buildToolsVersion = "28.0.3"
compileSdkVersion = 28
minSdkVersion = 21
targetSdkVersion = 28
buildToolsVersion = "29.0.3"
compileSdkVersion = 29
minSdkVersion = 23
targetSdkVersion = 29
supportLibVersion = "28.0.0"
// The Maven artifact groupdId of the third-party react-native modules which

View File

@@ -20,5 +20,5 @@
android.useAndroidX=true
android.enableJetifier=true
appVersion=20.3.0
sdkVersion=2.9.0
appVersion=20.4.2
sdkVersion=2.10.0

View File

@@ -0,0 +1,5 @@
#!/bin/bash
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
exec ${THIS_DIR}/../../node_modules/react-native/scripts/launchPackager.command --reset-cache

View File

@@ -8,7 +8,7 @@ THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOUR
export RCT_METRO_PORT="${RCT_METRO_PORT:=8081}"
echo "export RCT_METRO_PORT=${RCT_METRO_PORT}" > "${THIS_DIR}/../../node_modules/react-native/scripts/.packager.env"
adb reverse tcp:8081 tcp:8081
adb reverse tcp:$RCT_METRO_PORT tcp:$RCT_METRO_PORT
if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then
if ! curl -s "http://localhost:${RCT_METRO_PORT}/status" | grep -q "packager-status:running" ; then
@@ -16,11 +16,10 @@ if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then
exit 2
fi
else
CMD="${THIS_DIR}/../../node_modules/react-native/scripts/launchPackager.command"
CMD="$THIS_DIR/run-packager-helper.command"
if [[ `uname` == "Darwin" ]]; then
open -g "${CMD}" || echo "Can't start packager automatically"
else
xdg-open "${CMD}" || echo "Can't start packager automatically"
fi
fi

View File

@@ -16,11 +16,8 @@
package org.jitsi.meet.sdk;
import android.content.Context;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.os.Build;
import androidx.annotation.RequiresApi;
import java.util.HashSet;
import java.util.Set;
@@ -34,7 +31,6 @@ import org.jitsi.meet.sdk.log.JitsiMeetLogger;
* default it's only used on versions < O, since versions >= O use ConnectionService, but it
* can be disabled.
*/
@RequiresApi(Build.VERSION_CODES.M)
class AudioDeviceHandlerGeneric implements
AudioModeModule.AudioDeviceHandlerInterface,
AudioManager.OnAudioFocusChangeListener {

View File

@@ -1,230 +0,0 @@
/*
* Copyright @ 2017-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
/**
* {@link AudioModeModule.AudioDeviceHandlerInterface} module implementing device handling for
* legacy (pre-M) Android versions.
*/
class AudioDeviceHandlerLegacy implements
AudioModeModule.AudioDeviceHandlerInterface,
AudioManager.OnAudioFocusChangeListener,
BluetoothHeadsetMonitor.Listener {
private final static String TAG = AudioDeviceHandlerLegacy.class.getSimpleName();
/**
* Reference to the main {@code AudioModeModule}.
*/
private AudioModeModule module;
/**
* Indicator that we have lost audio focus.
*/
private boolean audioFocusLost = false;
/**
* {@link AudioManager} instance used to interact with the Android audio
* subsystem.
*/
private AudioManager audioManager;
/**
* {@link BluetoothHeadsetMonitor} for detecting Bluetooth device changes in
* old (< M) Android versions.
*/
private BluetoothHeadsetMonitor bluetoothHeadsetMonitor;
public AudioDeviceHandlerLegacy(AudioManager audioManager) {
this.audioManager = audioManager;
}
/**
* Helper method to trigger an audio route update when Bluetooth devices are
* connected / disconnected.
*/
@Override
public void onBluetoothDeviceChange(final boolean deviceAvailable) {
module.runInAudioThread(new Runnable() {
@Override
public void run() {
if (deviceAvailable) {
module.addDevice(AudioModeModule.DEVICE_BLUETOOTH);
} else {
module.removeDevice(AudioModeModule.DEVICE_BLUETOOTH);
}
module.updateAudioRoute();
}
});
}
/**
* Helper method to trigger an audio route update when a headset is plugged
* or unplugged.
*/
private void onHeadsetDeviceChange() {
module.runInAudioThread(new Runnable() {
@Override
public void run() {
// XXX: isWiredHeadsetOn is not deprecated when used just for
// knowing if there is a wired headset connected, regardless of
// audio being routed to it.
//noinspection deprecation
if (audioManager.isWiredHeadsetOn()) {
module.addDevice(AudioModeModule.DEVICE_HEADPHONES);
} else {
module.removeDevice(AudioModeModule.DEVICE_HEADPHONES);
}
module.updateAudioRoute();
}
});
}
/**
* {@link AudioManager.OnAudioFocusChangeListener} interface method. Called
* when the audio focus of the system is updated.
*
* @param focusChange - The type of focus change.
*/
@Override
public void onAudioFocusChange(final int focusChange) {
module.runInAudioThread(new Runnable() {
@Override
public void run() {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN: {
JitsiMeetLogger.d(TAG + " Audio focus gained");
// Some other application potentially stole our audio focus
// temporarily. Restore our mode.
if (audioFocusLost) {
module.updateAudioRoute();
}
audioFocusLost = false;
break;
}
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: {
JitsiMeetLogger.d(TAG + " Audio focus lost");
audioFocusLost = true;
break;
}
}
}
});
}
/**
* Helper method to set the output route to a Bluetooth device.
*
* @param enabled true if Bluetooth should use used, false otherwise.
*/
private void setBluetoothAudioRoute(boolean enabled) {
if (enabled) {
audioManager.startBluetoothSco();
audioManager.setBluetoothScoOn(true);
} else {
audioManager.setBluetoothScoOn(false);
audioManager.stopBluetoothSco();
}
}
@Override
public void start(AudioModeModule audioModeModule) {
JitsiMeetLogger.i("Using " + TAG + " as the audio device handler");
module = audioModeModule;
Context context = module.getContext();
// Setup runtime device change detection.
//
// Detect changes in wired headset connections.
IntentFilter wiredHeadSetFilter = new IntentFilter(AudioManager.ACTION_HEADSET_PLUG);
BroadcastReceiver wiredHeadsetReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
JitsiMeetLogger.d(TAG + " Wired headset added / removed");
onHeadsetDeviceChange();
}
};
context.registerReceiver(wiredHeadsetReceiver, wiredHeadSetFilter);
// Detect Bluetooth device changes.
bluetoothHeadsetMonitor = new BluetoothHeadsetMonitor(context, this);
// On Android < M, detect if we have an earpiece.
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
module.addDevice(AudioModeModule.DEVICE_EARPIECE);
}
// Always assume there is a speaker.
module.addDevice(AudioModeModule.DEVICE_SPEAKER);
}
@Override
public void stop() {
bluetoothHeadsetMonitor.stop();
bluetoothHeadsetMonitor = null;
}
@Override
public void setAudioRoute(String device) {
// Turn speaker on / off
audioManager.setSpeakerphoneOn(device.equals(AudioModeModule.DEVICE_SPEAKER));
// Turn bluetooth on / off
setBluetoothAudioRoute(device.equals(AudioModeModule.DEVICE_BLUETOOTH));
}
@Override
public boolean setMode(int mode) {
if (mode == AudioModeModule.DEFAULT) {
audioFocusLost = false;
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.abandonAudioFocus(this);
audioManager.setSpeakerphoneOn(false);
setBluetoothAudioRoute(false);
return true;
}
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setMicrophoneMute(false);
if (audioManager.requestAudioFocus(this, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN)
== AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
JitsiMeetLogger.w(TAG + " Audio focus request failed");
return false;
}
return true;
}
}

View File

@@ -222,10 +222,8 @@ class AudioModeModule extends ReactContextBaseJavaModule {
if (useConnectionService()) {
audioDeviceHandler = new AudioDeviceHandlerConnectionService(audioManager);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
audioDeviceHandler = new AudioDeviceHandlerGeneric(audioManager);
} else {
audioDeviceHandler = new AudioDeviceHandlerLegacy(audioManager);
audioDeviceHandler = new AudioDeviceHandlerGeneric(audioManager);
}
audioDeviceHandler.start(this);
@@ -427,15 +425,6 @@ class AudioModeModule extends ReactContextBaseJavaModule {
}
}
/**
* Needed on the legacy handler...
*
* @return Context for the application.
*/
Context getContext() {
return getReactApplicationContext();
}
/**
* Interface for the modules implementing the actual audio device management.
*/

View File

@@ -1,191 +0,0 @@
/*
* Copyright @ 2017-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
/**
* Helper class to detect and handle Bluetooth device changes. It monitors
* Bluetooth headsets being connected / disconnected and notifies the module
* about device changes when this occurs.
*/
class BluetoothHeadsetMonitor {
private final static String TAG = BluetoothHeadsetMonitor.class.getSimpleName();
/**
* The {@link Context} in which this module executes.
*/
private final Context context;
/**
* Reference to the {@link BluetoothAdapter} object, used to access Bluetooth functionality.
*/
private BluetoothAdapter adapter;
/**
* Reference to a proxy object which allows us to query connected devices.
*/
private BluetoothHeadset headset;
/**
* receiver registered for receiving Bluetooth connection state changes.
*/
private BroadcastReceiver receiver;
/**
* Listener for receiving Bluetooth device change events.
*/
private Listener listener;
public BluetoothHeadsetMonitor(Context context, Listener listener) {
this.context = context;
this.listener = listener;
}
private boolean getBluetoothHeadsetProfileProxy() {
adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null) {
JitsiMeetLogger.w(TAG + " Device doesn't support Bluetooth");
return false;
}
// XXX: The profile listener listens for system services of the given
// type being available to the application. That is, if our Bluetooth
// adapter has the "headset" profile.
BluetoothProfile.ServiceListener listener
= new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
if (profile == BluetoothProfile.HEADSET) {
headset = (BluetoothHeadset) proxy;
updateDevices();
}
}
@Override
public void onServiceDisconnected(int profile) {
// The logic is the same as the logic of onServiceConnected.
onServiceConnected(profile, /* proxy */ null);
}
};
return adapter.getProfileProxy(context, listener, BluetoothProfile.HEADSET);
}
private void onBluetoothReceiverReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)) {
// XXX: This action will be fired when a Bluetooth headset is
// connected or disconnected to the system. This is not related to
// audio routing.
int state = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, -99);
switch (state) {
case BluetoothHeadset.STATE_CONNECTED:
case BluetoothHeadset.STATE_DISCONNECTED:
JitsiMeetLogger.d(TAG + " BT headset connection state changed: " + state);
updateDevices();
break;
}
} else if (action.equals(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)) {
// XXX: This action will be fired when the connection established
// with a Bluetooth headset (called a SCO connection) changes state.
// When the SCO connection is active we route audio to it.
int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -99);
switch (state) {
case AudioManager.SCO_AUDIO_STATE_CONNECTED:
case AudioManager.SCO_AUDIO_STATE_DISCONNECTED:
JitsiMeetLogger.d(TAG + " BT SCO connection state changed: " + state);
updateDevices();
break;
}
}
}
private void registerBluetoothReceiver() {
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onBluetoothReceiverReceive(context, intent);
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);
filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
context.registerReceiver(receiver, filter);
}
/**
* Detects if there are new devices connected / disconnected and fires the
* {@link Listener} registered event.
*/
private void updateDevices() {
boolean headsetAvailable = (headset != null) && !headset.getConnectedDevices().isEmpty();
listener.onBluetoothDeviceChange(headsetAvailable);
}
public void start() {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (!audioManager.isBluetoothScoAvailableOffCall()) {
JitsiMeetLogger.w(TAG + " Bluetooth SCO is not available");
return;
}
if (!getBluetoothHeadsetProfileProxy()) {
JitsiMeetLogger.w(TAG + " Couldn't get BT profile proxy");
return;
}
registerBluetoothReceiver();
// Initial detection.
updateDevices();
}
public void stop() {
if (receiver != null) {
context.unregisterReceiver(receiver);
}
if (adapter != null && headset != null) {
adapter.closeProfileProxy(BluetoothProfile.HEADSET, headset);
}
receiver = null;
headset = null;
adapter = null;
}
interface Listener {
void onBluetoothDeviceChange(boolean deviceAvailable);
}
}

View File

@@ -1,6 +1,5 @@
/*
* Copyright @ 2019-present 8x8, Inc.
* Copyright @ 2018 Atlassian Pty Ltd
* Copyright @ 2018-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,16 +16,16 @@
package org.jitsi.meet.sdk;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.core.PermissionListener;
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
/**
* Helper class to encapsulate the work which needs to be done on
* {@link Activity} lifecycle methods in order for the React side to be aware of
@@ -178,9 +177,18 @@ public class JitsiMeetActivityDelegate {
};
}
@TargetApi(Build.VERSION_CODES.M)
public static void requestPermissions(Activity activity, String[] permissions, int requestCode, PermissionListener listener) {
permissionListener = listener;
activity.requestPermissions(permissions, requestCode);
// The RN Permissions module calls this in a non-UI thread. What we observe is a crash in ViewGroup.dispatchCancelPendingInputEvents,
// which is called on the calling (ie, non-UI) thread. This doesn't look very safe, so try to avoid a crash by pretending the permission
// was denied.
try {
activity.requestPermissions(permissions, requestCode);
} catch (Exception e) {
JitsiMeetLogger.e(e, "Error requesting permissions");
onRequestPermissionsResult(requestCode, permissions, new int[0]);
}
}
}

View File

@@ -1,6 +1,5 @@
/*
* Copyright @ 2018-present 8x8, Inc.
* Copyright @ 2017-2018 Atlassian Pty Ltd
* Copyright @ 2017-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -126,7 +125,7 @@ public class JitsiMeetView extends BaseReactView<JitsiMeetViewListener>
= ReactInstanceManagerHolder.getNativeModule(
PictureInPictureModule.class);
if (pipModule != null
&& PictureInPictureModule.isPictureInPictureSupported()
&& pipModule.isPictureInPictureSupported()
&& !JitsiMeetActivityDelegate.arePermissionsBeingRequested()
&& this.url != null) {
try {

View File

@@ -1,5 +1,5 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
* Copyright @ 2017-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.jitsi.meet.sdk;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.PictureInPictureParams;
import android.os.Build;
import android.util.Rational;
@@ -30,20 +31,41 @@ import com.facebook.react.module.annotations.ReactModule;
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
import java.util.HashMap;
import java.util.Map;
import static android.content.Context.ACTIVITY_SERVICE;
@ReactModule(name = PictureInPictureModule.NAME)
class PictureInPictureModule
extends ReactContextBaseJavaModule {
class PictureInPictureModule extends ReactContextBaseJavaModule {
public static final String NAME = "PictureInPicture";
private static final String TAG = NAME;
static boolean isPictureInPictureSupported() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
}
private static boolean isSupported;
public PictureInPictureModule(ReactApplicationContext reactContext) {
super(reactContext);
ActivityManager am = (ActivityManager) reactContext.getSystemService(ACTIVITY_SERVICE);
// Android Go devices don't support PiP. There doesn't seem to be a better way to detect it than
// to use ActivityManager.isLowRamDevice().
// https://stackoverflow.com/questions/58340558/how-to-detect-android-go
isSupported = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !am.isLowRamDevice();
}
/**
* Gets a {@code Map} of constants this module exports to JS. Supports JSON
* types.
*
* @return a {@link Map} of constants this module exports to JS
*/
@Override
public Map<String, Object> getConstants() {
Map<String, Object> constants = new HashMap<>();
constants.put("SUPPORTED", isSupported);
return constants;
}
/**
@@ -61,7 +83,7 @@ class PictureInPictureModule
*/
@TargetApi(Build.VERSION_CODES.O)
public void enterPictureInPicture() {
if (!isPictureInPictureSupported()) {
if (!isSupported) {
throw new IllegalStateException("Picture-in-Picture not supported");
}
@@ -104,6 +126,10 @@ class PictureInPictureModule
}
}
public boolean isPictureInPictureSupported() {
return isSupported;
}
@Override
public String getName() {
return NAME;

View File

@@ -1,5 +1,5 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
* Copyright @ 2017-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -33,21 +33,10 @@ import com.facebook.react.module.annotations.ReactModule;
* is used with the conference audio-only mode.
*/
@ReactModule(name = ProximityModule.NAME)
class ProximityModule
extends ReactContextBaseJavaModule {
class ProximityModule extends ReactContextBaseJavaModule {
public static final String NAME = "Proximity";
/**
* This type of wake lock (the one activated by the proximity sensor) has
* been available for a while, but the constant was only exported in API
* level 21 (Android Marshmallow) so make no assumptions and use its value
* directly.
*
* TODO: Remove when we bump the API level to 21.
*/
private static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32;
/**
* {@link WakeLock} instance.
*/
@@ -71,7 +60,7 @@ class ProximityModule
try {
wakeLock
= powerManager.newWakeLock(
PROXIMITY_SCREEN_OFF_WAKE_LOCK,
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,
"jitsi:"+NAME);
} catch (Throwable ignored) {
wakeLock = null;

View File

@@ -1,4 +1,4 @@
/* global $, APP, JitsiMeetJS, config, interfaceConfig */
/* global APP, JitsiMeetJS, config, interfaceConfig */
import EventEmitter from 'events';
import Logger from 'jitsi-meet-logger';
@@ -22,7 +22,7 @@ import {
maybeRedirectToWelcomePage,
redirectToStaticPage,
reloadWithStoredParams
} from './react/features/app';
} from './react/features/app/actions';
import {
AVATAR_ID_COMMAND,
AVATAR_URL_COMMAND,
@@ -95,6 +95,8 @@ import {
createLocalPresenterTrack,
createLocalTracksF,
destroyLocalTracks,
getLocalJitsiAudioTrack,
getLocalJitsiVideoTrack,
isLocalVideoTrackMuted,
isLocalTrackMuted,
isUserInteractionRequiredForUnmute,
@@ -120,8 +122,7 @@ import {
initPrejoin,
isPrejoinPageEnabled,
isPrejoinPageVisible,
replacePrejoinAudioTrack,
replacePrejoinVideoTrack
makePrecallTest
} from './react/features/prejoin';
import { createRnnoiseProcessorPromise } from './react/features/rnnoise';
import { toggleScreenshotCaptureEffect } from './react/features/screenshot-capture';
@@ -411,6 +412,10 @@ function disconnect() {
return Promise.resolve();
};
if (!connection) {
return onDisconnected();
}
return connection.disconnect().then(onDisconnected, onDisconnected);
}
@@ -755,7 +760,15 @@ export default {
}
if (isPrejoinPageEnabled(APP.store.getState())) {
_connectionPromise = connect(roomName);
_connectionPromise = connect(roomName).then(c => {
// we want to initialize it early, in case of errors to be able
// to gather logs
APP.connection = c;
return c;
});
APP.store.dispatch(makePrecallTest(this._getConferenceOptions()));
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions);
const tracks = await tryCreateLocalTracks;
@@ -1202,10 +1215,6 @@ export default {
// end used by torture
getLogs() {
return room.getLogs();
},
/**
* Download logs, a function that can be called from console while
* debugging.
@@ -1214,7 +1223,7 @@ export default {
saveLogs(filename = 'meetlog.json') {
// this can be called from console and will not have reference to this
// that's why we reference the global var
const logs = APP.conference.getLogs();
const logs = APP.connection.getLogs();
const data = encodeURIComponent(JSON.stringify(logs, null, ' '));
const elem = document.createElement('a');
@@ -1403,31 +1412,32 @@ export default {
/**
* Start using provided video stream.
* Stops previous video stream.
* @param {JitsiLocalTrack} [stream] new stream to use or null
* @param {JitsiLocalTrack} newTrack - new track to use or null
* @returns {Promise}
*/
useVideoStream(newStream) {
useVideoStream(newTrack) {
return new Promise((resolve, reject) => {
_replaceLocalVideoTrackQueue.enqueue(onFinish => {
/**
* When the prejoin page is visible there is no conference object
* created. The prejoin tracks are managed separately,
* so this updates the prejoin video track.
*/
if (isPrejoinPageVisible(APP.store.getState())) {
return APP.store.dispatch(replacePrejoinVideoTrack(newStream))
const state = APP.store.getState();
// When the prejoin page is displayed localVideo is not set
// so just replace the video track from the store with the new one.
if (isPrejoinPageVisible(state)) {
const oldTrack = getLocalJitsiVideoTrack(state);
return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))
.then(resolve)
.catch(reject)
.then(onFinish);
}
APP.store.dispatch(
replaceLocalTrack(this.localVideo, newStream, room))
replaceLocalTrack(this.localVideo, newTrack, room))
.then(() => {
this.localVideo = newStream;
this._setSharingScreen(newStream);
if (newStream) {
APP.UI.addLocalVideoStream(newStream);
this.localVideo = newTrack;
this._setSharingScreen(newTrack);
if (newTrack) {
APP.UI.addLocalVideoStream(newTrack);
}
this.setVideoMuteStatus(this.isLocalVideoMuted());
})
@@ -1468,28 +1478,29 @@ export default {
/**
* Start using provided audio stream.
* Stops previous audio stream.
* @param {JitsiLocalTrack} [stream] new stream to use or null
* @param {JitsiLocalTrack} newTrack - new track to use or null
* @returns {Promise}
*/
useAudioStream(newStream) {
useAudioStream(newTrack) {
return new Promise((resolve, reject) => {
_replaceLocalAudioTrackQueue.enqueue(onFinish => {
/**
* When the prejoin page is visible there is no conference object
* created. The prejoin tracks are managed separately,
* so this updates the prejoin audio stream.
*/
if (isPrejoinPageVisible(APP.store.getState())) {
return APP.store.dispatch(replacePrejoinAudioTrack(newStream))
const state = APP.store.getState();
// When the prejoin page is displayed localAudio is not set
// so just replace the audio track from the store with the new one.
if (isPrejoinPageVisible(state)) {
const oldTrack = getLocalJitsiAudioTrack(state);
return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))
.then(resolve)
.catch(reject)
.then(onFinish);
}
APP.store.dispatch(
replaceLocalTrack(this.localAudio, newStream, room))
replaceLocalTrack(this.localAudio, newTrack, room))
.then(() => {
this.localAudio = newStream;
this.localAudio = newTrack;
this.setAudioMuteStatus(this.isLocalAudioMuted());
})
.then(resolve)
@@ -1582,10 +1593,6 @@ export default {
if (didHaveVideo) {
promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))
.then(([ stream ]) => this.useVideoStream(stream))
.then(() => {
sendAnalytics(createScreenSharingEvent('stopped'));
logger.log('Screen sharing stopped.');
})
.catch(error => {
logger.error('failed to switch back to local video', error);
@@ -1602,6 +1609,8 @@ export default {
return promise.then(
() => {
this.videoSwitchInProgress = false;
sendAnalytics(createScreenSharingEvent('stopped'));
logger.info('Screen sharing stopped.');
},
error => {
this.videoSwitchInProgress = false;
@@ -1669,8 +1678,6 @@ export default {
* @private
*/
_createDesktopTrack(options = {}) {
let externalInstallation = false;
let DSExternalInstallationInProgress = false;
const didHaveVideo = !this.isLocalVideoMuted();
const getDesktopStreamPromise = options.desktopStream
@@ -1679,43 +1686,7 @@ export default {
desktopSharingSourceDevice: options.desktopSharingSources
? null : config._desktopSharingSourceDevice,
desktopSharingSources: options.desktopSharingSources,
devices: [ 'desktop' ],
desktopSharingExtensionExternalInstallation: {
interval: 500,
checkAgain: () => DSExternalInstallationInProgress,
listener: (status, url) => {
switch (status) {
case 'waitingForExtension': {
DSExternalInstallationInProgress = true;
externalInstallation = true;
const listener = () => {
// Wait a little bit more just to be sure that
// we won't miss the extension installation
setTimeout(() => {
DSExternalInstallationInProgress = false;
},
500);
APP.UI.removeListener(
UIEvents.EXTERNAL_INSTALLATION_CANCELED,
listener);
};
APP.UI.addListener(
UIEvents.EXTERNAL_INSTALLATION_CANCELED,
listener);
APP.UI.showExtensionExternalInstallationDialog(url);
break;
}
case 'extensionFound':
// Close the dialog.
externalInstallation && $.prompt.close();
break;
default:
// Unknown status
}
}
}
devices: [ 'desktop' ]
});
return getDesktopStreamPromise.then(desktopStreams => {
@@ -1739,15 +1710,8 @@ export default {
);
}
// close external installation dialog on success.
externalInstallation && $.prompt.close();
return desktopStreams;
}, error => {
DSExternalInstallationInProgress = false;
// close external installation dialog on success.
externalInstallation && $.prompt.close();
throw error;
});
},
@@ -1951,70 +1915,36 @@ export default {
/**
* Handles {@link JitsiTrackError} returned by the lib-jitsi-meet when
* trying to create screensharing track. It will either do nothing if
* the dialog was canceled on user's request or display inline installation
* dialog and ask the user to install the extension, once the extension is
* installed it will switch the conference to screensharing. The last option
* is that an unrecoverable error dialog will be displayed.
* the dialog was canceled on user's request or display an error if
* screensharing couldn't be started.
* @param {JitsiTrackError} error - The error returned by
* {@link _createDesktopTrack} Promise.
* @private
*/
_handleScreenSharingError(error) {
if (error.name === JitsiTrackErrors.CHROME_EXTENSION_USER_CANCELED) {
if (error.name === JitsiTrackErrors.SCREENSHARING_USER_CANCELED) {
return;
}
logger.error('failed to share local desktop', error);
if (error.name
=== JitsiTrackErrors.CHROME_EXTENSION_USER_GESTURE_REQUIRED) {
// If start with screen sharing the extension will fail to install
// (if not found), because the request has been triggered by the
// script. Show a dialog which asks user to click "install" and try
// again switching to the screen sharing.
APP.UI.showExtensionInlineInstallationDialog(
() => {
// eslint-disable-next-line no-empty-function
this.toggleScreenSharing().catch(() => {});
}
);
return;
}
// Handling:
// JitsiTrackErrors.PERMISSION_DENIED
// JitsiTrackErrors.CHROME_EXTENSION_INSTALLATION_ERROR
// JitsiTrackErrors.CONSTRAINT_FAILED
// JitsiTrackErrors.GENERAL
// JitsiTrackErrors.PERMISSION_DENIED
// JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR
// and any other
let descriptionKey;
let titleKey;
if (error.name === JitsiTrackErrors.PERMISSION_DENIED) {
// in FF the only option for user is to deny access temporary or
// permanently and we only receive permission_denied
// we always show some info cause in case of permanently, no info
// shown will be bad experience
//
// TODO: detect interval between requesting permissions and received
// error, this way we can detect user interaction which will have
// longer delay
if (JitsiMeetJS.util.browser.isFirefox()) {
descriptionKey
= 'dialog.screenSharingFirefoxPermissionDeniedError';
titleKey = 'dialog.screenSharingFirefoxPermissionDeniedTitle';
} else {
descriptionKey = 'dialog.screenSharingPermissionDeniedError';
titleKey = 'dialog.screenSharingFailedToInstallTitle';
}
descriptionKey = 'dialog.screenSharingPermissionDeniedError';
titleKey = 'dialog.screenSharingFailedTitle';
} else if (error.name === JitsiTrackErrors.CONSTRAINT_FAILED) {
descriptionKey = 'dialog.cameraConstraintFailedError';
titleKey = 'deviceError.cameraError';
} else {
descriptionKey = 'dialog.screenSharingFailedToInstall';
titleKey = 'dialog.screenSharingFailedToInstallTitle';
} else if (error.name === JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR) {
descriptionKey = 'dialog.screenSharingFailed';
titleKey = 'dialog.screenSharingFailedTitle';
}
APP.UI.messageHandler.showError({
@@ -2517,6 +2447,8 @@ export default {
if (state === 'stop'
|| state === 'start'
|| state === 'playing') {
const localParticipant = getLocalParticipant(APP.store.getState());
room.removeCommand(this.commands.defaults.SHARED_VIDEO);
room.sendCommandOnce(this.commands.defaults.SHARED_VIDEO, {
value: url,
@@ -2524,7 +2456,8 @@ export default {
state,
time,
muted: isMuted,
volume
volume,
from: localParticipant.id
}
});
} else {
@@ -2928,7 +2861,14 @@ export default {
this._room = undefined;
room = undefined;
APP.API.notifyReadyToClose();
/**
* Don't call {@code notifyReadyToClose} if the promotional page flag is set
* and let the page take care of sending the message, since there will be
* a redirect to the page regardlessly.
*/
if (!interfaceConfig.SHOW_PROMOTIONAL_CLOSE_PAGE) {
APP.API.notifyReadyToClose();
}
APP.store.dispatch(maybeRedirectToWelcomePage(values[0]));
});
},

163
config.js
View File

@@ -37,6 +37,8 @@ var config = {
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
// focusUserJid: 'focus@auth.jitsi-meet.example.com',
@@ -44,6 +46,10 @@ var config = {
//
testing: {
// Disables the End to End Encryption feature. Useful for debugging
// issues related to insertable streams.
// disableE2EE: false,
// P2P test mode disables automatic switching to P2P when there are 2
// participants in the conference.
p2pTestMode: false
@@ -107,11 +113,23 @@ var config = {
// participants and to enable it back a reload is needed.
// startSilent: false
// Sets the preferred target bitrate for the Opus audio codec by setting its
// 'maxaveragebitrate' parameter. Currently not available in p2p mode.
// Valid values are in the range 6000 to 510000
// opusMaxAverageBitrate: 20000,
// Enables redundancy for Opus
// enableOpusRed: false
// Video
// Sets the preferred resolution (height) for local video. Defaults to 720.
// resolution: 720,
// 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,
// w3c spec-compliant video constraints to use for video capture. Currently
// used by browsers that return true from lib-jitsi-meet's
// util#browser#usesNewGumFlow. The constraints are independent from
@@ -146,6 +164,7 @@ var config = {
// Note that it's not recommended to do this because simulcast is not
// supported when using H.264. For 1-to-1 calls this setting is enabled by
// default and can be toggled in the p2p section.
// This option has been deprecated, use preferredCodec under videoQuality section instead.
// preferH264: true,
// If set to true, disable H.264 video codec by stripping it out of the
@@ -154,22 +173,6 @@ var config = {
// Desktop sharing
// The ID of the jidesha extension for Chrome.
desktopSharingChromeExtId: null,
// Whether desktop sharing should be disabled on Chrome.
// desktopSharingChromeDisabled: false,
// The media sources to use when using screen sharing with the Chrome
// extension.
desktopSharingChromeSources: [ 'screen', 'window', 'tab' ],
// Required version of Chrome extension
desktopSharingChromeMinExtVersion: '0.1',
// Whether desktop sharing should be disabled on Firefox.
// desktopSharingFirefoxDisabled: false,
// Optional desktop sharing frame rate options. Default value: min:5, max:5.
// desktopSharingFrameRate: {
// min: 5,
@@ -217,6 +220,64 @@ var config = {
// Default value for the channel "last N" attribute. -1 for unlimited.
channelLastN: -1,
// Provides a way to use different "last N" values based on the number of participants in the conference.
// The keys in an Object represent number of participants and the values are "last N" to be used when number of
// participants gets to or above the number.
//
// For the given example mapping, "last N" will be set to 20 as long as there are at least 5, but less than
// 29 participants in the call and it will be lowered to 15 when the 30th participant joins. The 'channelLastN'
// will be used as default until the first threshold is reached.
//
// lastNLimits: {
// 5: 20,
// 30: 15,
// 50: 10,
// 70: 5,
// 90: 2
// },
// Specify the settings for video quality optimizations on the client.
// videoQuality: {
// // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified
// // here will be removed from the list of codecs present in the SDP answer generated by the client. If the
// // same codec is specified for both the disabled and preferred option, the disable settings will prevail.
// // Note that 'VP8' cannot be disabled since it's a mandatory codec, the setting will be ignored in this case.
// disabledCodec: 'H264',
//
// // Provides a way to set a preferred video codec for the JVB connection. If 'H264' is specified here,
// // simulcast will be automatically disabled since JVB doesn't support H264 simulcast yet. This will only
// // rearrange the the preference order of the codecs in the SDP answer generated by the browser only if the
// // preferred codec specified here is present. Please ensure that the JVB offers the specified codec for this
// // to take effect.
// preferredCodec: 'VP8',
//
// // Provides a way to configure the maximum bitrates that will be enforced on the simulcast streams for
// // video tracks. The keys in the object represent the type of the stream (LD, SD or HD) and the values
// // are the max.bitrates to be set on that particular type of stream. The actual send may vary based on
// // the available bandwidth calculated by the browser, but it will be capped by the values specified here.
// // This is currently not implemented on app based clients on mobile.
// maxBitratesVideo: {
// low: 200000,
// standard: 500000,
// high: 1500000
// },
//
// // The options can be used to override default thresholds of video thumbnail heights corresponding to
// // the video quality levels used in the application. At the time of this writing the allowed levels are:
// // 'low' - for the low quality level (180p at the time of this writing)
// // 'standard' - for the medium quality level (360p)
// // 'high' - for the high quality level (720p)
// // The keys should be positive numbers which represent the minimal thumbnail height for the quality level.
// //
// // With the default config value below the application will use 'low' quality until the thumbnails are
// // at least 360 pixels tall. If the thumbnail height reaches 720 pixels then the application will switch to
// // the high quality.
// minHeightForQualityLvl: {
// 360: 'standard,
// 720: 'high'
// }
// },
// // Options for the recording limit notification.
// recordingLimit: {
//
@@ -260,11 +321,14 @@ var config = {
// is set in Jicofo and set to 2).
// minParticipants: 2,
// Use XEP-0215 to fetch STUN and TURN servers.
// Use the TURN servers discovered via XEP-0215 for the jitsi-videobridge
// connection
// useStunTurn: true,
// Enable IPv6 support.
// useIPv6: true,
// Use TURN/UDP servers for the jitsi-videobridge connection (by default
// we filter out TURN/UDP because it is usually not needed since the
// bridge itself is reachable via UDP)
// useTurnUdp: false
// Enables / disables a data communication channel with the Videobridge.
// Values can be 'datachannel', 'websocket', true (treat it as
@@ -276,8 +340,8 @@ var config = {
// UI
//
// Use display name as XMPP nickname.
// useNicks: false,
// Hides lobby button
// hideLobbyButton: false,
// Require users to always specify a display name.
// requireDisplayName: true,
@@ -319,9 +383,18 @@ var config = {
// and microsoftApiApplicationClientID
// enableCalendarIntegration: false,
// When 'true', it shows an intermediate page before joining, where the user can configure its devices.
// When 'true', it shows an intermediate page before joining, where the user can configure their devices.
// prejoinPageEnabled: false,
// If true, shows the unsafe room name warning label when a room name is
// deemed unsafe (due to the simplicity in the name) and a password is not
// set or the lobby is not enabled.
// enableInsecureRoomNameWarning: false,
// Whether to automatically copy invitation URL after creating a room.
// Document should be focused for this option to work
// enableAutomaticUrlCopy: false,
// Stats
//
@@ -339,10 +412,10 @@ var config = {
// callStatsID: '',
// callStatsSecret: '',
// enables sending participants display name to callstats
// Enables sending participants' display names to callstats
// enableDisplayNameInStats: false,
// enables sending participants email if available to callstats and other analytics
// Enables sending participants' emails (if available) to callstats and other analytics
// enableEmailInStats: false,
// Privacy
@@ -372,7 +445,7 @@ var config = {
// The STUN servers that will be used in the peer to peer connections
stunServers: [
// { urls: 'stun:jitsi-meet.example.com:4446' },
// { urls: 'stun:jitsi-meet.example.com:3478' },
{ urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }
]
@@ -385,13 +458,20 @@ var config = {
// iceTransportPolicy: 'all',
// If set to true, it will prefer to use H.264 for P2P calls (if H.264
// is supported).
// is supported). This setting is deprecated, use preferredCodec instead.
// preferH264: true
// Provides a way to set the video codec preference on the p2p connection. Acceptable
// codec values are 'VP8', 'VP9' and 'H264'.
// preferredCodec: 'H264',
// If set to true, disable H.264 video codec by stripping it out of the
// SDP.
// SDP. This setting is deprecated, use disabledCodec instead.
// disableH264: false,
// Provides a way to prevent a video codec from being negotiated on the p2p connection.
// disabledCodec: '',
// How long we're going to wait, before going back to P2P after the 3rd
// participant has left the conference (to filter out page reload).
// backToP2PDelay: 5
@@ -408,6 +488,21 @@ var config = {
// The Amplitude APP Key:
// amplitudeAPPKey: '<APP_KEY>'
// Configuration for the rtcstats server:
// By enabling rtcstats server every time a conference is joined the rtcstats
// module connects to the provided rtcstatsEndpoint and sends statistics regarding
// PeerConnection states along with getStats metrics polled at the specified
// interval.
// rtcstatsEnabled: true,
// In order to enable rtcstats one needs to provide a endpoint url.
// rtcstatsEndpoint: wss://rtcstats-server-pilot.jitsi.net/,
// The interval at which rtcstats will poll getStats, defaults to 1000ms.
// If the value is set to 0 getStats won't be polled and the rtcstats client
// will only send data related to RTCPeerConnection events.
// rtcstatsPolIInterval: 1000
// Array of script URLs to load as lib-jitsi-meet "analytics handlers".
// scriptURLs: [
// "libs/analytics-ga.min.js", // google-analytics
@@ -515,7 +610,7 @@ var config = {
/**
External API url used to receive branding specific information.
If there is no url set or there are missing fields, the defaults are applied.
None of the fieds are mandatory and the response must have the shape:
None of the fields are mandatory and the response must have the shape:
{
// The hex value for the colour used as background
backgroundColor: '#fff',
@@ -529,6 +624,11 @@ var config = {
*/
// brandingDataUrl: '',
// The URL of the moderated rooms microservice, if available. If it
// is present, a link to the service will be rendered on the welcome page,
// otherwise the app doesn't render it.
// moderatedRoomServiceUrl: 'https://moderated.jitsi-meet.example.com',
// List of undocumented settings used in jitsi-meet
/**
_immediateReloadThreshold
@@ -556,6 +656,13 @@ var config = {
tokenAuthUrl
*/
/**
* This property can be used to alter the generated meeting invite links (in combination with a branding domain
* which is retrieved internally by jitsi meet) (e.g. https://meet.jit.si/someMeeting
* can become https://brandedDomain/roomAlias)
*/
// brandingRoomAlias: null,
// List of undocumented settings used in lib-jitsi-meet
/**
_peerConnStatusOutOfLastNTimeout

View File

@@ -1,18 +1,19 @@
/* global APP, JitsiMeetJS, config */
import { jitsiLocalStorage } from '@jitsi/js-utils';
import Logger from 'jitsi-meet-logger';
import { jitsiLocalStorage } from 'js-utils';
import AuthHandler from './modules/UI/authentication/AuthHandler';
import {
connectionEstablished,
connectionFailed
} from './react/features/base/connection';
} from './react/features/base/connection/actions';
import {
isFatalJitsiConnectionError,
JitsiConnectionErrors,
JitsiConnectionEvents
} from './react/features/base/lib-jitsi-meet';
import { setPrejoinDisplayNameRequired } from './react/features/prejoin/actions';
const logger = Logger.getLogger(__filename);
@@ -81,7 +82,7 @@ function checkForAttachParametersAndConnect(id, password, connection) {
*/
function connect(id, password, roomName) {
const connectionConfig = Object.assign({}, config);
const { issuer, jwt } = APP.store.getState()['features/base/jwt'];
const { jwt } = APP.store.getState()['features/base/jwt'];
// Use Websocket URL for the web app if configured. Note that there is no 'isWeb' check, because there's assumption
// that this code executes only on web browsers/electron. This needs to be changed when mobile and web are unified.
@@ -93,11 +94,7 @@ function connect(id, password, roomName) {
// in future). It's included for the time being for Jitsi Meet and lib-jitsi-meet versions interoperability.
connectionConfig.serviceUrl = connectionConfig.bosh = serviceUrl;
const connection
= new JitsiMeetJS.JitsiConnection(
null,
jwt && issuer && issuer !== 'anonymous' ? jwt : undefined,
connectionConfig);
const connection = new JitsiMeetJS.JitsiConnection(null, jwt, connectionConfig);
if (config.iAmRecorder) {
connection.addFeature(DISCO_JIBRI_FEATURE);
@@ -113,6 +110,10 @@ function connect(id, password, roomName) {
connection.addEventListener(
JitsiConnectionEvents.CONNECTION_FAILED,
connectionFailedHandler);
connection.addEventListener(
JitsiConnectionEvents.DISPLAY_NAME_REQUIRED,
displayNameRequiredHandler
);
/* eslint-disable max-params */
/**
@@ -166,6 +167,14 @@ function connect(id, password, roomName) {
reject(err);
}
/**
* Marks the display name for the prejoin screen as required.
* This can happen if a user tries to join a room with lobby enabled.
*/
function displayNameRequiredHandler() {
APP.store.dispatch(setPrejoinDisplayNameRequired());
}
checkForAttachParametersAndConnect(id, password, connection);
});
}
@@ -198,10 +207,9 @@ export function openConnection({ id, password, retry, roomName }) {
return connect(id, password, roomName).catch(err => {
if (retry) {
const { issuer, jwt } = APP.store.getState()['features/base/jwt'];
const { jwt } = APP.store.getState()['features/base/jwt'];
if (err === JitsiConnectionErrors.PASSWORD_REQUIRED
&& (!jwt || issuer === 'anonymous')) {
if (err === JitsiConnectionErrors.PASSWORD_REQUIRED && !jwt) {
return AuthHandler.requestAuth(roomName, connect);
}
}

View File

@@ -2,7 +2,7 @@
* Move the @atlaskit/flag container up a little bit so it does not cover the
* toolbar with the first notification.
*/
.cjMOOK{
.jIMojv{
bottom: calc(#{$newToolbarSizeWithPadding}) !important;
}

View File

@@ -33,6 +33,26 @@ body {
}
}
/**
* AtlasKit sets a default margin on the rendered modals, so
* when the shift-right class is set when the chat opens, we
* pad the modal container in order for the modals to be centered
* while also taking the chat size into consideration.
*/
@media (min-width: 480px + $sidebarWidth) {
.shift-right [class^="Modal__FillScreen"] {
padding-left: $sidebarWidth;
}
}
/**
* Similarly, we offset the notifications when the chat is open by
* padding the container.
*/
.shift-right [class^="styledFlagGroup-"] {
padding-left: $sidebarWidth;
}
.jitsi-icon svg {
fill: white;
}

View File

@@ -4,16 +4,11 @@
color: #FFF;
display: flex;
flex-direction: column;
/**
* Make the sidebar flush with the top of the toolbar. Take the size of
* the toolbar and subtract from 100%.
*/
height: calc(100% - #{$newToolbarSizeWithPadding});
height: 100%;
left: -$sidebarWidth;
overflow: hidden;
position: absolute;
top: 0;
transition: left 0.5s;
width: $sidebarWidth;
z-index: $sideToolbarContainerZ;

View File

@@ -0,0 +1,60 @@
.con-status {
position: absolute;
top: 40px;
width: 100%;
z-index: $toolbarZ + 3;
&-container {
background: rgba(28, 32, 37, .5);
border-radius: 3px;
color: #fff;
font-size: 13px;
line-height: 20px;
margin: 0 auto;
width: 304px;
}
&-header {
align-items: center;
display: flex;
justify-content: space-between;
padding: 8px;
}
&-circle {
border-radius: 50%;
display: inline-block;
padding: 4px;
}
&--good {
background: #31B76A;
}
&--poor {
background: #E12D2D;
}
&--non-optimal {
background: #E39623;
}
&-arrow {
&--up {
transform: rotate(180deg);
}
&>svg {
cursor: pointer;
}
}
&-text {
text-align: center;
}
&-details {
border-top: 1px solid #5E6D7A;
padding: 16px;
}
}

41
css/_e2ee.scss Normal file
View File

@@ -0,0 +1,41 @@
#e2ee-section {
.title {
font-weight: 700;
}
.description {
font-size: 13px;
margin: 15px 0;
.read-more {
cursor: pointer;
opacity: .7;
}
}
.key-field {
align-items: center;
display: flex;
flex-direction: row;
label {
font-size: 14px;
font-weight: 700;
}
input {
background-color: inherit;
border: none;
color: inherit;
flex: 1;
padding: 0 5px;
}
a {
color: #6FB1EA;
cursor: pointer;
font-size: 14px;
text-decoration: none;
}
}
}

View File

@@ -4,7 +4,7 @@
top: 30px;
right: 30px;
transition: right 0.5s;
z-index: $zindex3;
z-index: $filmstripVideosZ + 1;
.circular-label {
align-items: center;

View File

@@ -34,6 +34,10 @@
display: flex;
flex-direction: column;
.description {
font-size: 13px;
}
.control-row {
display: flex;
flex-direction: row;

View File

@@ -96,6 +96,11 @@
padding: 0 8px;
}
}
.prejoin-dialog-btn.primary,
.action-btn.prejoin-dialog-btn.text {
width: 310px;
}
}
.prejoin-dialog-callout {

View File

@@ -36,15 +36,19 @@
}
&-checkbox-container {
align-items: center;
color: #fff;
display: none;
font-size: 13px;
justify-content: center;
line-height: 20px;
margin-top: 16px;
margin-bottom: 14px;
width: 100%;
}
&-error {
color: white;
background-color: rgba(229, 75, 75, 0.5);
width: 100%;
padding: 3px;
margin-top: 4px;
font-size: 13px;
text-align: center;
}
}
@mixin name-placeholder {

View File

@@ -1,22 +1,90 @@
/**
* Shared style for full screen local track based dialogs/modals.
*/
.premeeting-screen,
.preview-overlay {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.premeeting-screen {
align-items: stretch;
background: #1C2025;
bottom: 0;
background: radial-gradient(50% 50% at 50% 50%, #5D95C7 0%, #376288 100%), #FFFFFF;
display: flex;
flex-direction: column;
font-size: 1.3em;
left: 0;
position: absolute;
right: 0;
top: 0;
z-index: $toolbarZ + 1;
.action-btn {
border-radius: 3px;
color: #fff;
cursor: pointer;
display: inline-block;
font-size: 15px;
line-height: 24px;
margin-top: 16px;
padding: 7px 16px;
position: relative;
text-align: center;
width: 286px;
&.primary {
background: #0376DA;
border: 1px solid #0376DA;
}
&.secondary {
background: transparent;
border: 1px solid #5E6D7A;
}
&.text {
width: auto;
font-size: 13px;
margin: 0;
padding: 0;
}
&.disabled {
background: #5E6D7A;
border: 1px solid #5E6D7A;
color: #AFB6BC;
cursor: initial;
.icon {
& > svg {
fill: #AFB6BC;
}
}
.options {
border-left: 1px solid #AFB6BC;
}
}
.options {
align-items: center;
border-left: 1px solid #fff;
display: flex;
height: 100%;
justify-content: center;
position: absolute;
right: 0;
top: 0;
width: 40px;
}
}
.preview-overlay {
background-image: linear-gradient(transparent, black);
z-index: $toolbarZ + 1;
}
.content {
align-items: center;
background-image: linear-gradient(transparent, black);
display: flex;
flex: 1;
flex-direction: column;
@@ -40,6 +108,7 @@
font-weight: 300;
justify-content: center;
line-height: 24px;
margin-bottom: 16px;
.url {
display: flex;
@@ -59,6 +128,13 @@
}
}
.copy-meeting-text {
width: 266px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&:hover {
align-self: stretch;
}
@@ -77,8 +153,9 @@
border: 1px solid transparent;
color: white;
outline-width: 0;
padding: 20px;
padding: 8px 0;
text-align: center;
width: 100%;
&.focused {
border-bottom: 1px solid white;
@@ -88,66 +165,6 @@
color: $defaultWarningColor;
}
}
.action-btn {
border-radius: 3px;
color: #fff;
cursor: pointer;
display: inline-block;
font-size: 15px;
line-height: 24px;
margin: 10px;
padding: 7px 16px;
position: relative;
text-align: center;
width: 286px;
&.primary {
background: #0376DA;
border: 1px solid #0376DA;
}
&.secondary {
background: transparent;
border: 1px solid #5E6D7A;
}
&.text {
width: auto;
font-size: 13px;
margin: 0;
padding: 0;
}
&.disabled {
background: #5E6D7A;
border: 1px solid #5E6D7A;
color: #AFB6BC;
cursor: initial;
.icon {
& > svg {
fill: #AFB6BC;
}
}
.options {
border-left: 1px solid #AFB6BC;
}
}
.options {
align-items: center;
border-left: 1px solid #fff;
display: flex;
height: 100%;
justify-content: center;
position: absolute;
right: 0;
top: 0;
width: 40px;
}
}
}
.media-btn-container {
@@ -182,7 +199,7 @@
.avatar {
background: #A4B8D1;
margin: 200px auto 0 auto;
margin: 0 auto;
}
video {
@@ -191,4 +208,67 @@
position: absolute;
width: 100%;
}
}
}
@mixin flex-centered() {
align-items: center;
display: flex;
justify-content: center;
}
@mixin icon-container($bg, $fill) {
.toggle-button-icon-container {
background: $bg;
svg {
fill: $fill
}
}
}
.toggle-button {
border-radius: 3px;
cursor: pointer;
color: #fff;
font-size: 13px;
height: 40px;
margin: 0 auto;
width: 320px;
@include flex-centered();
svg {
fill: transparent;
}
&:hover {
background: #1C2025;
@include icon-container(#A4B8D1, #1C2025);
}
&-container {
position: relative;
@include flex-centered();
}
&-icon-container {
border-radius: 50%;
left: -22px;
padding: 2px;
position: absolute;
}
&--toggled {
background: #75757A;
&:hover {
background: #75757A;
@include icon-container(#A4B8D1, #75757A);
}
@include icon-container(#A4B8D1, #75757A);
}
}

70
css/_responsive.scss Normal file
View File

@@ -0,0 +1,70 @@
@media only screen and (max-width: $smallScreen) {
.watermark {
width: 20%;
height: 20%;
}
.new-toolbox {
.toolbox-content {
.button-group-center, .button-group-left, .button-group-right {
.toolbox-button {
.toolbox-icon {
width: 28px;
height: 28px;
svg {
width: 18px;
height: 18px;
}
}
&:nth-child(2) {
.toolbox-icon {
width: 30px;
height: 30px;
}
}
}
}
}
}
}
@media only screen and (max-width: $verySmallScreen) {
#videoResolutionLabel {
display: none;
}
.desktop-browser {
.vertical-filmstrip .filmstrip {
display: none;
}
}
.new-toolbox {
.toolbox-content {
.button-group-center, .button-group-left, .button-group-right {
.settings-button-small-icon {
display: none;
}
.toolbox-button {
.toolbox-icon {
width: 18px;
height: 18px;
svg {
width: 12px;
height: 12px;
}
}
&:nth-child(2) {
.toolbox-icon {
width: 20px;
height: 20px;
}
}
}
}
}
}
.chrome-extension-banner {
display: none;
}
}

View File

@@ -35,6 +35,10 @@
cursor: initial;
color: #fff;
background-color: #a4b8d1;
&:hover {
background-color: #a4b8d1;
}
}
svg {

View File

@@ -42,6 +42,11 @@
display: none;
}
&.shift-right {
margin-left: $sidebarWidth;
width: calc(100% - #{$sidebarWidth});
}
.toolbox-background {
background-image: linear-gradient(to top, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
transition: bottom .3s ease-in;

View File

@@ -164,6 +164,9 @@ $unsupportedDesktopBrowserTextFontSize: 21px;
$watermarkWidth: 186px;
$watermarkHeight: 74px;
$welcomePageWatermarkWidth: 186px;
$welcomePageWatermarkHeight: 74px;
/**
* Welcome page variables.
*/
@@ -178,9 +181,12 @@ $welcomePageHeaderBackgroundPosition: none;
$welcomePageHeaderBackgroundRepeat: none;
$welcomePageHeaderBackgroundSize: none;
$welcomePageHeaderPaddingBottom: 0px;
$welcomePageHeaderMinHeight: fit-content;
$welcomePageHeaderTextMarginTop: 35px;
$welcomePageHeaderTextMarginBottom: 35px;
$welcomePageHeaderTextDisplay: flex;
$welcomePageHeaderTextWidth: 650px;
$welcomePageHeaderTextTitleMarginBottom: 16px;
$welcomePageHeaderTextTitleFontSize: 2.5rem;
@@ -195,6 +201,7 @@ $welcomePageHeaderTextDescriptionLineHeight: 24px;
$welcomePageHeaderTextDescriptionMarginBottom: 20px;
$welcomePageHeaderTextDescriptionAlignSelf: inherit;
$welcomePageEnterRoomDisplay: flex;
$welcomePageEnterRoomWidth: 680px;
$welcomePageEnterRoomPadding: 25px 30px;
$welcomePageEnterRoomBorderRadius: 0px;
@@ -269,3 +276,9 @@ $chromeExtensionBannerTop: 80px;
$chromeExtensionBannerRight: 16px;
$chromeExtensionBannerTopInMeeting: 10px;
$chromeExtensionBannerRightInMeeeting: 10px;
/**
* media type thresholds
*/
$smallScreen: 700px;
$verySmallScreen: 500px;

View File

@@ -181,6 +181,13 @@
visibility: hidden;
z-index: $zindex2;
}
&.shift-right {
&#largeVideoContainer {
margin-left: $sidebarWidth;
width: calc(100% - #{$sidebarWidth});
}
}
}
#localVideoWrapper {

View File

@@ -21,18 +21,18 @@ body.welcome-page {
align-items: center;
display: flex;
flex-direction: column;
min-height: fit-content;
min-height: $welcomePageHeaderMinHeight;
overflow: hidden;
position: relative;
text-align: center;
.header-text {
display: flex;
display: $welcomePageHeaderTextDisplay;
flex-direction: column;
margin-top: $watermarkHeight + $welcomePageHeaderTextMarginTop;
margin-bottom: $welcomePageHeaderTextMarginBottom;
max-width: calc(100% - 40px);
width: 650px;
width: $welcomePageHeaderTextWidth;
z-index: $zindex2;
}
@@ -56,7 +56,7 @@ body.welcome-page {
}
#enter_room {
display: flex;
display: $welcomePageEnterRoomDisplay;
align-items: center;
max-width: calc(100% - 40px);
width: $welcomePageEnterRoomWidth;
@@ -95,8 +95,12 @@ body.welcome-page {
flex-direction: row;
margin-top: 5px;
svg {
fill: $defaultWarningColor
.jitsi-icon {
margin-right: 15px;
svg {
fill: $defaultWarningColor
}
}
}
@@ -107,6 +111,22 @@ body.welcome-page {
}
#moderated-meetings {
max-width: calc(100% - 40px);
padding: 16px 0 39px 0;
width: $welcomePageEnterRoomWidth;
p {
color: $welcomePageDescriptionColor;
text-align: left;
a {
color: inherit;
font-weight: 600;
}
}
}
.tab-container {
font-size: 16px;
position: relative;
@@ -191,5 +211,10 @@ body.welcome-page {
position: absolute;
width: 100%;
height: 100%;
.watermark.leftwatermark {
width: $welcomePageWatermarkWidth;
height: $welcomePageWatermarkHeight;
}
}
}

38
css/buttons/copy.scss Normal file
View File

@@ -0,0 +1,38 @@
.copy-button {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 8px 8px 16px;
margin-top: 8px;
width: calc(100% - 24px);
height: 24px;
background: #0376DA;
border-radius: 4px;
cursor: pointer;
&:hover {
background: #278ADF;
font-weight: 600;
}
&-content {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 292px;
margin-right: 16px;
&.selected {
font-weight: 600;
}
}
&.clicked {
background: #31B76A;
}
& > div > svg > path {
fill: #fff;
}
}

View File

@@ -46,7 +46,16 @@
position: fixed;
top: 0;
width: 100%;
z-index: $filmstripVideosZ
z-index: $filmstripVideosZ;
&.shift-right {
margin-left: $sidebarWidth;
width: calc(100% - #{$sidebarWidth});
#filmstripRemoteVideos {
width: calc(100vw - #{$sidebarWidth});
}
}
}
/**

View File

@@ -33,9 +33,11 @@ $flagsImagePath: "../images/";
@import 'inlay';
@import 'reload_overlay/reload_overlay';
@import 'mini_toolbox';
@import 'buttons/copy.scss';
@import 'modals/desktop-picker/desktop-picker';
@import 'modals/device-selection/device-selection';
@import 'modals/dialog';
@import 'modals/embed-meeting/embed-meeting';
@import 'modals/feedback/feedback';
@import 'modals/invite/info';
@import 'modals/settings/settings';
@@ -98,5 +100,8 @@ $flagsImagePath: "../images/";
@import 'modals/invite/invite_more';
@import 'modals/security/security';
@import 'premeeting-screens';
@import 'e2ee';
@import 'responsive';
@import 'connection-status';
/* Modules END */

View File

@@ -0,0 +1,59 @@
.embed-meeting {
&-dialog {
display: flex;
flex-direction: column;
&-header {
display: flex;
justify-content: space-between;
margin: 16px 16px 24px;
width: calc(100% - 32px);
color: #fff;
font-weight: 600;
font-size: 24px;
line-height: 32px;
& > div > svg {
cursor: pointer;
fill: #A4B8D1;
}
}
}
&-copy {
color: white;
font-size: 15px;
margin-left: auto;
margin-top: 16px;
width: auto;
}
&-code {
background: transparent;
border: 1px solid #A4B8D1;
color: white;
font-size: 15px;
height: 165px;
line-height: 24px;
padding: 8px;
width: 100%;
resize: vertical;
}
&-trigger {
display: flex;
align-items: center;
padding: 8px 8px 8px 16px;
margin-top: 24px;
width: calc(100% - 24px);
height: 24px;
background: #2A3A4B;
border: 1px solid #5E6D7A;
border-radius: 4px;
cursor: pointer;
.jitsi-icon {
margin-right: 20px;
}
}
}

View File

@@ -47,10 +47,6 @@
font-size: 15px;
line-height: 24px;
& > span {
font-weight: 600;
}
&.header {
display: flex;
justify-content: space-between;
@@ -67,44 +63,6 @@
}
}
&.copy-link {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 8px 8px 16px;
margin-top: 8px;
width: calc(100% - 24px);
height: 24px;
background: #0376DA;
border-radius: 4px;
cursor: pointer;
&:hover {
background: #278ADF;
font-weight: 600;
}
&-text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 292px;
&.selected {
font-weight: 600;
}
}
&.clicked {
background: #31B76A;
}
& > div > svg > path {
fill: #fff;
}
}
&.separator {
margin: 24px 0 24px -20px;
padding: 0 20px;
@@ -208,6 +166,12 @@
padding: 8px 16px;
background: #0376DA;
}
&.disabled {
& > a {
pointer-events: none;
}
}
}
&.stream {

View File

@@ -8,6 +8,10 @@
display: flex;
flex-direction: column;
.description {
font-size: 13px;
}
.password {
align-items: center;
display: flex;
@@ -22,17 +26,13 @@
color: #6FB1EA;
}
&>a+a {
margin-left: 24px;
& > :first-child:not(:last-child) {
margin-right: 24px;
}
}
}
}
&> :first-child:not(:last-child) {
margin-right: 24px;
}
.separator-line {
margin: 24px 0 24px -20px;
padding: 0 20px;
@@ -47,13 +47,10 @@
}
}
.new-toolbox .toolbox-content .toolbox-icon.security-toolbar-button,
.new-toolbox .toolbox-content .toolbox-icon.toggled.security-toolbar-button {
background: rgba(241, 173, 51, 0.7);
border: 1px solid rgba(255, 255, 255, 0.4);
border-width: 0;
&:hover {
background: rgba(241, 173, 51, 0.7);
border: 1px solid rgba(255, 255, 255, 0.4);
&:not(:hover) {
background: unset;
}
}

View File

@@ -30,10 +30,12 @@
width: 100%;
}
.profile-edit-field,
.settings-sub-pane {
.profile-edit-field {
flex: 1;
}
.settings-sub-pane {
flex-grow: 1;
}
.profile-edit-field {
margin-right: 20px;

2
debian/control vendored
View File

@@ -47,7 +47,7 @@ Description: Prosody configuration for Jitsi Meet
Package: jitsi-meet-tokens
Architecture: all
Depends: ${misc:Depends}, prosody-trunk (>= 1nightly747) | prosody-0.11 | prosody (>= 0.11.2), libssl-dev, luarocks, jitsi-meet-prosody
Depends: ${misc:Depends}, prosody-trunk (>= 1nightly747) | prosody-0.11 | prosody (>= 0.11.2), libssl1.0-dev | libssl-dev, luarocks, jitsi-meet-prosody, git
Description: Prosody token authentication plugin for Jitsi Meet
Package: jitsi-meet-turnserver

View File

@@ -48,9 +48,9 @@ case "$1" in
db_stop
if [ -f "$PROSODY_HOST_CONFIG" ] ; then
# search for --plugin_paths, if this is not enabled this is the
# search for the token auth, if this is not enabled this is the
# first time we install tokens package and needs a config change
if grep -q "\-\-plugin_paths" "$PROSODY_HOST_CONFIG"; then
if ! egrep -q '^\s*authentication\s*=\s*"token"' "$PROSODY_HOST_CONFIG"; then
# enable tokens in prosody host config
sed -i 's/--plugin_paths/plugin_paths/g' $PROSODY_HOST_CONFIG
sed -i 's/authentication = "anonymous"/authentication = "token"/g' $PROSODY_HOST_CONFIG
@@ -58,6 +58,7 @@ case "$1" in
sed -i "s/ --app_id=\"example_app_id\"/ app_id=\"$APP_ID\"/g" $PROSODY_HOST_CONFIG
sed -i "s/ --app_secret=\"example_app_secret\"/ app_secret=\"$APP_SECRET\"/g" $PROSODY_HOST_CONFIG
sed -i 's/ --modules_enabled = { "token_verification" }/ modules_enabled = { "token_verification" }/g' $PROSODY_HOST_CONFIG
sed -i '/^\s*--\s*"token_verification"/ s/--\s*//' $PROSODY_HOST_CONFIG
# Install luajwt
if ! luarocks install luajwtjitsi; then
@@ -73,9 +74,9 @@ case "$1" in
PRTRUNK_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'prosody-trunk' 2>/dev/null | awk '{print $3}' || true)"
PR_VER_INSTALLED=$(dpkg-query -f='${Version}\n' --show prosody 2>/dev/null || true)
if [ "$PR10_INSTALL_CHECK" = "installed" ] \
|| "$PR10_INSTALL_CHECK" = "unpacked" \
|| "$PRTRUNK_INSTALL_CHECK" = "installed" \
|| "$PRTRUNK_INSTALL_CHECK" = "unpacked" \
|| [ "$PR10_INSTALL_CHECK" = "unpacked" ] \
|| [ "$PRTRUNK_INSTALL_CHECK" = "installed" ] \
|| [ "$PRTRUNK_INSTALL_CHECK" = "unpacked" ] \
|| dpkg --compare-versions "$PR_VER_INSTALLED" lt "0.11" ; then
sed -i 's/module:hook_global(/module:hook(/g' /usr/share/jitsi-meet/prosody-plugins/mod_auth_token.lua
fi

View File

@@ -37,11 +37,10 @@ case "$1" in
APP_SECRET=$RET
# Revert prosody config
sed -i 's/plugin_paths/--plugin_paths/g' $PROSODY_HOST_CONFIG
sed -i 's/authentication = "token"/authentication = "anonymous"/g' $PROSODY_HOST_CONFIG
sed -i "s/ app_id=\"$APP_ID\"/ --app_id=\"example_app_id\"/g" $PROSODY_HOST_CONFIG
sed -i "s/ app_secret=\"$APP_SECRET\"/ --app_secret=\"example_app_secret\"/g" $PROSODY_HOST_CONFIG
sed -i 's/ -- "token_verification"/ "token_verification"/g' $PROSODY_HOST_CONFIG
sed -i '/^\s*"token_verification"/ s/"token_verification"/-- "token_verification"/' $PROSODY_HOST_CONFIG
if [ -x "/etc/init.d/prosody" ]; then
invoke-rc.d prosody restart || true

View File

@@ -49,7 +49,7 @@ case "$1" in
# nothing to do
echo "------------------------------------------------"
echo ""
echo "turnserver is listening on tcp 4445 as other nginx sites use port 443"
echo "turnserver is listening on tcp 5349 as other nginx sites use port 443"
echo ""
echo "------------------------------------------------"
NGINX_MULTIPLEXING="false"
@@ -87,9 +87,36 @@ case "$1" in
if [[ -f $TURN_CONFIG ]] ; then
echo "------------------------------------------------"
echo ""
echo "turnserver is already configured on this machine, skipping."
echo "turnserver is already configured on this machine."
echo ""
echo "------------------------------------------------"
if grep -q "jitsi-meet coturn config" "$TURN_CONFIG" && ! grep -q "jitsi-meet coturn relay disable config" "$TURN_CONFIG" ; then
echo "Updating coturn config"
echo "# jitsi-meet coturn relay disable config. Do not modify this line
no-multicast-peers
no-cli
no-loopback-peers
no-tcp-relay
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255" >> $TURN_CONFIG
invoke-rc.d coturn restart || true
fi
db_stop
exit 0
fi
@@ -152,7 +179,7 @@ case "$1" in
PROSODY_HOST_CONFIG="/etc/prosody/conf.avail/$JVB_HOSTNAME.cfg.lua"
if [ -f $PROSODY_HOST_CONFIG ] ; then
# If we are not multiplexing we need to change the port in prosody config
sed -i 's/"443"/"4445"/g' $PROSODY_HOST_CONFIG
sed -i 's/"443"/"5349"/g' $PROSODY_HOST_CONFIG
invoke-rc.d prosody restart || true
fi
fi

View File

@@ -91,10 +91,14 @@ case "$1" in
CERT_CRT="/etc/jitsi/meet/$JVB_HOSTNAME.crt"
HOST="$( (hostname -s; echo localhost) | head -n 1)"
DOMAIN="$( (hostname -d; echo localdomain) | head -n 1)"
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj \
openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -subj \
"/O=$DOMAIN/OU=$HOST/CN=$JVB_HOSTNAME/emailAddress=webmaster@$HOST.$DOMAIN" \
-keyout $CERT_KEY \
-out $CERT_CRT
-out $CERT_CRT \
-reqexts SAN \
-extensions SAN \
-config <(cat /etc/ssl/openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS:localhost,DNS:$JVB_HOSTNAME"))
fi
fi

View File

@@ -1,3 +1,3 @@
# Documentation
The Jitsi documentation has been moved to [The Handbook](https://jitsi.github.io/handbook/).
The Jitsi documentation has been moved to [The Handbook](https://jitsi.github.io/handbook/). The repo is https://github.com/jitsi/handbook.

View File

@@ -6,8 +6,8 @@ muc_mapper_domain_base = "jitmeet.example.com";
turncredentials_secret = "__turnSecret__";
turncredentials = {
{ type = "stun", host = "jitmeet.example.com", port = "4446" },
{ type = "turn", host = "jitmeet.example.com", port = "4446", transport = "udp" },
{ type = "stun", host = "jitmeet.example.com", port = "3478" },
{ type = "turn", host = "jitmeet.example.com", port = "3478", transport = "udp" },
{ type = "turns", host = "jitmeet.example.com", port = "443", transport = "tcp" }
};

View File

@@ -5,14 +5,32 @@ static-auth-secret=__turnSecret__
realm=jitsi-meet.example.com
cert=/etc/jitsi/meet/jitsi-meet.example.com.crt
pkey=/etc/jitsi/meet/jitsi-meet.example.com.key
no-multicast-peers
no-cli
no-loopback-peers
no-tcp-relay
no-tcp
listening-port=4446
tls-listening-port=4445
listening-port=3478
tls-listening-port=5349
external-ip=__external_ip_address__
no-tlsv1
no-tlsv1_1
# https://ssl-config.mozilla.org/#server=haproxy&version=2.1&config=intermediate&openssl=1.1.0g&guideline=5.4
cipher-list=ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
# jitsi-meet coturn relay disable config. Do not modify this line
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
syslog

View File

@@ -7,7 +7,7 @@ stream {
server 127.0.0.1:4444;
}
upstream turn {
server 127.0.0.1:4445;
server 127.0.0.1:5349;
}
# since 1.13.10
map $ssl_preread_alpn_protocols $upstream {

View File

@@ -45,8 +45,10 @@ server {
error_page 404 /static/404.html;
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_types text/plain text/css application/javascript application/json image/x-icon application/octet-stream application/wasm;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 512;
location = /config.js {
alias /etc/jitsi/meet/jitsi-meet.example.com-config.js;
@@ -61,6 +63,11 @@ server {
{
add_header 'Access-Control-Allow-Origin' '*';
alias /usr/share/jitsi-meet/$1/$2;
# cache all versioned files
if ($arg_v) {
expires 1y;
}
}
# BOSH

View File

@@ -14,6 +14,12 @@ server {
ssi on;
}
gzip on;
gzip_types text/plain text/css application/javascript application/json image/x-icon application/octet-stream application/wasm;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 512;
# BOSH
location /http-bind {
proxy_pass http://localhost:5280/http-bind;

View File

@@ -28,6 +28,12 @@ server {
tcp_nodelay on;
}
gzip on;
gzip_types text/plain text/css application/javascript application/json image/x-icon application/octet-stream application/wasm;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 512;
location ~ ^/([^/?&:'"]+)$ {
try_files $uri @root_path;
}

View File

@@ -8,7 +8,17 @@
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link rel="stylesheet" href="css/all.css">
<script>
document.addEventListener('DOMContentLoaded', () => {
if (!JitsiMeetJS.app) {
return;
}
JitsiMeetJS.app.renderEntryPoint({
Component: JitsiMeetJS.app.entryPoints.APP
})
})
</script>
<script>
// IE11 and earlier can be identified via their user agent and be
// redirected to a page that is known to have no newer js syntax.

View File

@@ -1,135 +1,23 @@
/* eslint-disable no-unused-vars, no-var, max-len */
/* eslint sort-keys: ["error", "asc", {"caseSensitive": false}] */
var interfaceConfig = {
DEFAULT_BACKGROUND: '#474747',
DEFAULT_LOGO_URL: '../images/watermark.png',
/**
* Whether or not the blurred video background for large video should be
* displayed on browsers that can support it.
*/
DISABLE_VIDEO_BACKGROUND: false,
INITIAL_TOOLBAR_TIMEOUT: 20000,
TOOLBAR_TIMEOUT: 4000,
TOOLBAR_ALWAYS_VISIBLE: false,
DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
SHOW_JITSI_WATERMARK: true,
JITSI_WATERMARK_LINK: 'https://jitsi.org',
// if watermark is disabled by default, it can be shown only for guests
SHOW_WATERMARK_FOR_GUESTS: true,
SHOW_BRAND_WATERMARK: false,
BRAND_WATERMARK_LINK: '',
SHOW_POWERED_BY: false,
SHOW_DEEP_LINKING_IMAGE: false,
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
DISPLAY_WELCOME_PAGE_CONTENT: true,
DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
APP_NAME: 'Jitsi Meet',
NATIVE_APP_NAME: 'Jitsi Meet',
PROVIDER_NAME: 'Jitsi',
LANG_DETECTION: true, // Allow i18n to detect the system language
INVITATION_POWERED_BY: true,
/**
* If we should show authentication block in profile
*/
AUTHENTICATION_ENABLE: true,
/**
* The name of the toolbar buttons to display in the toolbar. If present,
* the button will display. Exceptions are "livestreaming" and "recording"
* which also require being a moderator and some values in config.js to be
* enabled. Also, the "profile" button will not display for user's with a
* jwt.
*/
TOOLBAR_BUTTONS: [
'microphone', 'camera', 'closedcaptions', 'desktop', 'fullscreen',
'fodeviceselection', 'hangup', 'profile', 'chat', 'recording',
'livestreaming', 'etherpad', 'sharedvideo', 'settings', 'raisehand',
'videoquality', 'filmstrip', 'invite', 'feedback', 'stats', 'shortcuts',
'tileview', 'videobackgroundblur', 'download', 'help', 'mute-everyone',
'e2ee', 'security'
],
SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar' ],
// 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.
VIDEO_LAYOUT_FIT: 'both',
/**
* Whether to only show the filmstrip (and hide the toolbar).
*/
filmStripOnly: false,
/**
* Whether to show thumbnails in filmstrip as a column instead of as a row.
*/
VERTICAL_FILMSTRIP: true,
// A html text to be shown to guests on the close page, false disables it
CLOSE_PAGE_GUEST_HINT: false,
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
RANDOM_AVATAR_URL_PREFIX: false,
RANDOM_AVATAR_URL_SUFFIX: false,
FILM_STRIP_MAX_HEIGHT: 120,
// Enables feedback star animation.
ENABLE_FEEDBACK_ANIMATION: false,
DISABLE_FOCUS_INDICATOR: false,
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
/**
* Whether the speech to text transcription subtitles panel is disabled.
* If {@code undefined}, defaults to {@code false}.
*
* @type {boolean}
*/
DISABLE_TRANSCRIPTION_SUBTITLES: false,
/**
* Whether the ringing sound in the call/ring overlay is disabled. If
* {@code undefined}, defaults to {@code false}.
*
* @type {boolean}
*/
DISABLE_RINGING: false,
AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
POLICY_LOGO: null,
LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
REMOTE_THUMBNAIL_RATIO: 1, // 1:1
// Documentation reference for the live streaming feature.
LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live',
/**
* Whether the mobile app Jitsi Meet is to be promoted to participants
* attempting to join a conference in a mobile Web browser. If
* {@code undefined}, defaults to {@code true}.
* A UX mode where the last screen share participant is automatically
* pinned. Valid values are the string "remote-only" so remote participants
* get pinned but not local, otherwise any truthy value for all participants,
* and any falsy value to disable the feature.
*
* @type {boolean}
* Note: this mode is experimental and subject to breakage.
*/
MOBILE_APP_PROMO: true,
/**
* Maximum coeficient of the ratio of the large video to the visible area
* after the large video is scaled to fit the window.
*
* @type {number}
*/
MAXIMUM_ZOOMING_COEFFICIENT: 1.3,
/*
* If indicated some of the error dialogs may point to the support URL for
* help.
*/
SUPPORT_URL: 'https://community.jitsi.org/',
AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
BRAND_WATERMARK_LINK: '',
CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
/**
* Whether the connection indicator icon should hide itself based on
* connection strength. If true, the connection indicator will remain
@@ -156,51 +44,120 @@ var interfaceConfig = {
*/
CONNECTION_INDICATOR_DISABLED: false,
/**
* If true, hides the video quality label indicating the resolution status
* of the current large video.
*
* @type {boolean}
*/
VIDEO_QUALITY_LABEL_DISABLED: false,
DEFAULT_BACKGROUND: '#474747',
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
DEFAULT_LOGO_URL: 'images/watermark.png',
DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/watermark.png',
/**
* If true, will display recent list
*
* @type {boolean}
*/
RECENT_LIST_ENABLED: true,
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
// Names of browsers which should show a warning stating the current browser
// has a suboptimal experience. Browsers which are not listed as optimal or
// unsupported are considered suboptimal. Valid values are:
// chrome, chromium, edge, electron, firefox, nwjs, opera, safari
OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ],
// Browsers, in addition to those which do not fully support WebRTC, that
// are not supported and should show the unsupported browser page.
UNSUPPORTED_BROWSERS: [],
/**
* A UX mode where the last screen share participant is automatically
* pinned. Valid values are the string "remote-only" so remote participants
* get pinned but not local, otherwise any truthy value for all participants,
* and any falsy value to disable the feature.
*
* Note: this mode is experimental and subject to breakage.
*/
AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
/**
* If true, presence status: busy, calling, connected etc. is not displayed.
*/
DISABLE_PRESENCE_STATUS: false,
DISABLE_FOCUS_INDICATOR: false,
/**
* If true, notifications regarding joining/leaving are no longer displayed.
*/
DISABLE_JOIN_LEAVE_NOTIFICATIONS: false,
/**
* If true, presence status: busy, calling, connected etc. is not displayed.
*/
DISABLE_PRESENCE_STATUS: false,
/**
* Whether the ringing sound in the call/ring overlay is disabled. If
* {@code undefined}, defaults to {@code false}.
*
* @type {boolean}
*/
DISABLE_RINGING: false,
/**
* Whether the speech to text transcription subtitles panel is disabled.
* If {@code undefined}, defaults to {@code false}.
*
* @type {boolean}
*/
DISABLE_TRANSCRIPTION_SUBTITLES: false,
/**
* Whether or not the blurred video background for large video should be
* displayed on browsers that can support it.
*/
DISABLE_VIDEO_BACKGROUND: false,
DISPLAY_WELCOME_PAGE_CONTENT: true,
DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
ENABLE_DIAL_OUT: true,
ENABLE_FEEDBACK_ANIMATION: false, // Enables feedback star animation.
FILM_STRIP_MAX_HEIGHT: 120,
/**
* Whether to only show the filmstrip (and hide the toolbar).
*/
filmStripOnly: false,
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
/**
* Hide the logo on the deep linking pages.
*/
HIDE_DEEP_LINKING_LOGO: false,
/**
* Hide the invite prompt in the header when alone in the meeting.
*/
HIDE_INVITE_MORE_HEADER: false,
INITIAL_TOOLBAR_TIMEOUT: 20000,
JITSI_WATERMARK_LINK: 'https://jitsi.org',
LANG_DETECTION: true, // Allow i18n to detect the system language
LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live', // Documentation reference for the live streaming feature.
LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
/**
* Maximum coefficient of the ratio of the large video to the visible area
* after the large video is scaled to fit the window.
*
* @type {number}
*/
MAXIMUM_ZOOMING_COEFFICIENT: 1.3,
/**
* Whether the mobile app Jitsi Meet is to be promoted to participants
* attempting to join a conference in a mobile Web browser. If
* {@code undefined}, defaults to {@code true}.
*
* @type {boolean}
*/
MOBILE_APP_PROMO: true,
NATIVE_APP_NAME: 'Jitsi Meet',
// Names of browsers which should show a warning stating the current browser
// has a suboptimal experience. Browsers which are not listed as optimal or
// unsupported are considered suboptimal. Valid values are:
// chrome, chromium, edge, electron, firefox, nwjs, opera, safari
OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ],
POLICY_LOGO: null,
PROVIDER_NAME: 'Jitsi',
/**
* If true, will display recent list
*
* @type {boolean}
*/
RECENT_LIST_ENABLED: true,
REMOTE_THUMBNAIL_RATIO: 1, // 1:1
SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar' ],
SHOW_BRAND_WATERMARK: false,
/**
* Decides whether the chrome extension banner should be rendered on the landing page and during the meeting.
* If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s)
@@ -208,6 +165,64 @@ var interfaceConfig = {
*/
SHOW_CHROME_EXTENSION_BANNER: false,
SHOW_DEEP_LINKING_IMAGE: false,
SHOW_JITSI_WATERMARK: true,
SHOW_POWERED_BY: false,
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
SHOW_WATERMARK_FOR_GUESTS: true, // if watermark is disabled by default, it can be shown only for guests
/*
* If indicated some of the error dialogs may point to the support URL for
* help.
*/
SUPPORT_URL: 'https://community.jitsi.org/',
TOOLBAR_ALWAYS_VISIBLE: false,
/**
* The name of the toolbar buttons to display in the toolbar, including the
* "More actions" menu. If present, the button will display. Exceptions are
* "livestreaming" and "recording" which also require being a moderator and
* some values in config.js to be enabled. Also, the "profile" button will
* not display for users with a JWT.
* Notes:
* - it's impossible to choose which buttons go in the "More actions" menu
* - it's impossible to control the placement of buttons
* - 'desktop' controls the "Share your screen" button
*/
TOOLBAR_BUTTONS: [
'microphone', 'camera', 'closedcaptions', 'desktop', 'embedmeeting', 'fullscreen',
'fodeviceselection', 'hangup', 'profile', 'chat', 'recording',
'livestreaming', 'etherpad', 'sharedvideo', 'settings', 'raisehand',
'videoquality', 'filmstrip', 'invite', 'feedback', 'stats', 'shortcuts',
'tileview', 'videobackgroundblur', 'download', 'help', 'mute-everyone', 'security'
],
TOOLBAR_TIMEOUT: 4000,
// Browsers, in addition to those which do not fully support WebRTC, that
// are not supported and should show the unsupported browser page.
UNSUPPORTED_BROWSERS: [],
/**
* Whether to show thumbnails in filmstrip as a column instead of as a row.
*/
VERTICAL_FILMSTRIP: true,
// 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.
VIDEO_LAYOUT_FIT: 'both',
/**
* If true, hides the video quality label indicating the resolution status
* of the current large video.
*
* @type {boolean}
*/
VIDEO_QUALITY_LABEL_DISABLED: false,
/**
* When enabled, the kick participant button will not be presented for users without a JWT
*/
@@ -260,15 +275,15 @@ var interfaceConfig = {
// List of undocumented settings
/**
INDICATOR_FONT_SIZES
MOBILE_DYNAMIC_LINK
PHONE_NUMBER_REGEX
*/
// Allow all above example options to include a trailing comma and
// prevent fear when commenting out the last value.
// eslint-disable-next-line sort-keys
makeJsonParserHappy: 'even if last key had a trailing comma'
// no configuration value should follow this line.
// No configuration value should follow this line.
};
/* eslint-enable no-unused-vars, no-var, max-len */

View File

@@ -293,7 +293,7 @@ PODS:
- React
- react-native-netinfo (4.1.5):
- React
- react-native-webrtc (1.75.3):
- react-native-webrtc (1.84.0):
- React
- react-native-webview (7.4.1):
- React
@@ -530,9 +530,9 @@ SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df
Crashlytics: 9220f5bc89e7a618df411b4f639389dbfb0e03d2
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74
Fabric: ea977e3cd9c20425516d3dafd3bf8c941c51223f
FBLazyVector: 4a5251159a3ed05dc11cc8b74cf937869935814b
FBReactNativeSpec: 6fa602a20993212cc9877a81838578ffb0008bc9
Firebase: 497158b816d0a86fc31babbd05546fcd7e6083ff
@@ -569,7 +569,7 @@ SPEC CHECKSUMS:
react-native-calendar-events: 1442fad71a00388f933cfa25512588fec300fcf8
react-native-keep-awake: eba3137546b10003361b37c761f6c429b59814ae
react-native-netinfo: 8d8db463bcc5db66a8ac5c48a7d86beb3b92f61a
react-native-webrtc: 86d841823e66d68cc1f86712db1c2956056bf0c2
react-native-webrtc: 9268ae9a2bc9730796b0968d012327e92c392adf
react-native-webview: 4dbc1d2a4a6b9c5e9e723c62651917aa2b5e579e
React-RCTActionSheet: b72ddbfbe15b44ce691d128e4b582f4bb9abb540
React-RCTAnimation: cfaefba5024499d336b76ab850e6bd33b232b5e3
@@ -591,4 +591,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 082858daebbe170e7a490de433e7f2a99e0c3701
COCOAPODS: 1.9.1
COCOAPODS: 1.9.3

View File

@@ -291,9 +291,9 @@
13B07F8E1A680F5B00A75B9A /* Resources */,
0B26BE701EC5BC3C00EEFB41 /* Embed Frameworks */,
B35383AD1DDA0083008F406A /* Adjust embedded framework architectures */,
DE3A859324C701EA009B7D76 /* Copy WebRTC dSYM */,
0BB7DA181EC9E695007AAE98 /* Adjust ATS */,
DEF4813D224925A2002AD03A /* Copy Google Plist file */,
DEC2069321CBBD6900072F03 /* Setup Crashlytics */,
DE11877A21EE09640078D059 /* Setup Google reverse URL handler */,
DE4F6D6E22005C0400DE699E /* Setup Dropbox */,
0BEA5C491F7B8F73000D0AB4 /* Embed Watch Content */,
@@ -474,6 +474,24 @@
shellPath = /bin/sh;
shellScript = "INFO_PLIST=\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"\nGOOGLE_PLIST=\"$PROJECT_DIR/GoogleService-Info.plist\"\n\nif [[ -f $GOOGLE_PLIST ]]; then\n REVERSED_CLIENT_ID=$(/usr/libexec/PlistBuddy -c \"Print :REVERSED_CLIENT_ID:\" $GOOGLE_PLIST)\n /usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:1:CFBundleURLSchemes:0 $REVERSED_CLIENT_ID\" $INFO_PLIST\nfi\n";
};
DE3A859324C701EA009B7D76 /* Copy WebRTC dSYM */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Copy WebRTC dSYM";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "set -x\n\nif [[ \"${CONFIGURATION}\" != \"Debug\" ]]; then\n cp -r ../../node_modules/react-native-webrtc/ios/WebRTC.dSYM ${DWARF_DSYM_FOLDER_PATH}/\nfi\n";
};
DE4F6D6E22005C0400DE699E /* Setup Dropbox */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -492,24 +510,6 @@
shellPath = /bin/sh;
shellScript = "INFO_PLIST=\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"\nDROPBOX_KEY_FILE=\"$PROJECT_DIR/dropbox.key\"\n\nif [[ -f $DROPBOX_KEY_FILE ]]; then\n /usr/libexec/PlistBuddy -c \"Delete :LSApplicationQueriesSchemes\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes array\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes:0 string 'dbapi-2'\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes:1 string 'dbapi-8-emm'\" $INFO_PLIST\n\n DROPBOX_KEY=$(head -n 1 $DROPBOX_KEY_FILE)\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLName string dropbox\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLSchemes array\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLSchemes:0 string $DROPBOX_KEY\" $INFO_PLIST\nfi\n";
};
DEC2069321CBBD6900072F03 /* Setup Crashlytics */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Setup Crashlytics";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "GOOGLE_PLIST=\"$PROJECT_DIR/GoogleService-Info.plist\"\n\nif [[ -f $GOOGLE_PLIST ]]; then\n if [ \"${CONFIGURATION}\" != \"Debug\" ]; then\n find \"${DWARF_DSYM_FOLDER_PATH}\" -name \"*.dSYM\" | xargs -I \\{\\} ${PODS_ROOT}/Fabric/upload-symbols -gsp $GOOGLE_PLIST -p ios \\{\\}\n fi\nfi\n";
};
DEF4813D224925A2002AD03A /* Copy Google Plist file */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;

View File

@@ -36,6 +36,7 @@
jitsiMeet.universalLinkDomains = @[@"meet.jit.si", @"alpha.jitsi.net", @"beta.meet.jit.si"];
jitsiMeet.defaultConferenceOptions = [JitsiMeetConferenceOptions fromBuilder:^(JitsiMeetConferenceOptionsBuilder *builder) {
[builder setFeatureFlag:@"resolution" withValue:@(360)];
builder.serverURL = [NSURL URLWithString:@"https://meet.jit.si"];
builder.welcomePageEnabled = YES;

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>20.3.0</string>
<string>20.4.2</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
@@ -66,10 +66,10 @@
<string>See your scheduled meetings in the app.</string>
<key>NSCameraUsageDescription</key>
<string>Participate in meetings with video.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSMicrophoneUsageDescription</key>
<string>Participate in meetings with voice.</string>
<key>NSLocalNetworkUsageDescription</key>
<string>Local network is used for establishing Peer-to-Peer connections.</string>
<key>NSUserActivityTypes</key>
<array>
<string>org.jitsi.JitsiMeet.ios.conference</string>

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>20.3.0</string>
<string>20.4.2</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>20.3.0</string>
<string>20.4.2</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CLKComplicationPrincipalClass</key>

View File

@@ -80,6 +80,10 @@ platform :ios do
uses_non_exempt_encryption: false
)
# Upload dSYMs to Crashlytics
download_dsyms
upload_symbols_to_crashlytics
# Cleanup
clean_build_artifacts
reset_git_repo(skip_clean: true)

View File

@@ -0,0 +1,5 @@
#!/bin/bash
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
exec ${THIS_DIR}/../../node_modules/react-native/scripts/launchPackager.command --reset-cache

View File

@@ -3,6 +3,8 @@
# This script is executed from Xcode to start the React packager for Debug
# targets.
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
export RCT_METRO_PORT="${RCT_METRO_PORT:=8081}"
echo "export RCT_METRO_PORT=${RCT_METRO_PORT}" > "${SRCROOT}/../../node_modules/react-native/scripts/.packager.env"
@@ -13,7 +15,6 @@ if [[ "$CONFIGURATION" = "Debug" ]]; then
exit 2
fi
else
open -g "$SRCROOT/../../node_modules/react-native/scripts/launchPackager.command" || echo "Can't start packager automatically"
open -g "$THIS_DIR/run-packager-helper.command" || echo "Can't start packager automatically"
fi
fi

View File

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

View File

@@ -1,6 +1,7 @@
{
"en": "Anglès",
"af": "Afrikaans",
"ar": "Àrab",
"bg": "Búlgar",
"ca": "Català",
"cs": "Txec",
@@ -10,25 +11,36 @@
"enGB": "Anglès (Regne Unit)",
"eo": "Esperanto",
"es": "Espanyol",
"esUS": "Espanyol (Amèrica llatina)",
"esUS": "Espanyol (Amèrica Llatina)",
"et": "Estonià",
"eu": "Èuscar",
"fi": "Finès",
"fr": "Francès",
"frCA": "Francès (Canadà)",
"he": "Hebreu",
"mr": "Marathi",
"hr": "Croat",
"hu": "Hongarès",
"hy": "Armeni",
"id": "Indonesi",
"it": "Italià",
"ja": "Japonès",
"ko": "Coreà",
"lt": "Lituà",
"nl": "Neerlandès",
"oc": "Occità",
"pl": "Polonès",
"ptBR": "Portuguès (Brasil)",
"ru": "Rus",
"ro": "Romanès",
"sc": "Sard",
"sk": "Eslovac",
"sl": "Eslovè",
"sv": "Suec",
"th": "Tai",
"tr": "Turc",
"uk": "Ucraïnès",
"vi": "Vietnamita",
"zhCN": "Xinès (Xina)",
"zhTW": "Xinès (Taiwan)",
"et": "Estonià"
"zhTW": "Xinès (Taiwan)"
}

View File

@@ -13,6 +13,7 @@
"it": "Taṭalyant",
"ja": "Tajapunit",
"ko": "Takurit",
"kab": "Taqbaylit",
"nb": "Tanurvijit Bukmal",
"oc": "Tuksitant",
"pl": "Tapulunit",
@@ -23,5 +24,25 @@
"sv": "Taswidit",
"tr": "Taṭurkit",
"vi": "Tavyitnamit",
"zhCN": "Tavyitnamit"
"zhCN": "Tavyitnamit",
"ro": "Tarumanit",
"ar": "Taɛrabt",
"zhTW": "Tacinwat (Taiwan)",
"uk": "Tukranit",
"th": "Tayland",
"sc": "Tasardit",
"nl": "Tahulandit",
"lt": "Taliṭwanit",
"id": "Tandunizit",
"hu": "Tahungrit",
"hr": "Takrwasit",
"he": "Taɛbrit",
"frCA": "Tafṛansist (Kanada)",
"fi": "Tafinit",
"eu": "Tabaskit",
"et": "Tastunit",
"esUS": "Taspanit (Temrikt Talatinit)",
"enGB": "Tagnizit (Tagldit i ddukklen)",
"da": "Tadanit",
"ca": "Takaṭalant"
}

View File

@@ -38,5 +38,11 @@
"lt": "Lituanian",
"id": "Indonesian",
"he": "Ebrèu",
"eu": "Basc"
"eu": "Basc",
"mr": "Marathi",
"sl": "Eslovèn",
"ro": "Romanian",
"ar": "Arabi"
}

View File

@@ -25,6 +25,7 @@
"id": "Indonesian",
"it": "Italian",
"ja": "Japanese",
"kab": "Kabyle",
"ko": "Korean",
"lt": "Lithuanian",
"nl": "Dutch",

View File

@@ -534,7 +534,7 @@
"selectCamera": "Kamera",
"selectMic": "Mikrofon",
"startAudioMuted": "Při připojení všem zlumit zvuk",
"startVideoMuted": "Všechny připojovat jako skrýté",
"startVideoMuted": "Všechny připojovat jako skryté",
"title": "Nastavení",
"speakers": "Reproduktory",
"microphones": "Mikrofony"
@@ -567,7 +567,7 @@
"name": "Řečník",
"seconds": "",
"speakerStats": "Statistika řečníků",
"speakerTime": "Mluvil již"
"speakerTime": "Mluvil(a) již"
},
"startupoverlay": {
"policyText": " ",
@@ -638,7 +638,7 @@
"openChat": "",
"pip": "",
"profile": "Upravit váš profil",
"raiseHand": "Příhlásit / Odhlásit se o slovo",
"raiseHand": "Přihlásit / Odhlásit se o slovo",
"raiseYourHand": "",
"Settings": "Nastavení",
"sharedvideo": "Sdílet obraz YouTube videa",

View File

@@ -3,14 +3,15 @@
"add": "Einladen",
"addContacts": "Laden Sie Ihre Kontakte ein",
"copyInvite": "Sitzungseinladung kopieren",
"copyLink": "Meeting-Link kopieren",
"copyStream": "Live-Streaming-Link kopieren",
"copyLink": "Konferenzlink kopieren",
"copyStream": "Livestreaminglink kopieren",
"countryNotSupported": "Wir unterstützen dieses Land noch nicht.",
"countryReminder": "Telefonnummer nicht in den USA? Bitte sicherstellen, dass die Telefonnummer mit dem Ländercode beginnt.",
"defaultEmail": "Ihre Standard-E-Mail",
"disabled": "Sie können keine Teilnehmer einladen.",
"failedToAdd": "Fehler beim Hinzufügen von Teilnehmern",
"footerText": "Abgehender Ruf ist deaktiviert.",
"googleEmail": "Google-E-Mail",
"inviteMoreHeader": "Sie sind alleine in der Sitzung",
"inviteMoreMailSubject": "An {{appName}} Meeting teilnehmen",
"inviteMorePrompt": "Mehr Leute einladen",
@@ -20,14 +21,16 @@
"loadingPeople": "Suche nach einzuladenden Teilnehmern",
"noResults": "Keine passenden Ergebnisse",
"noValidNumbers": "Telefonnummer eingeben",
"outlookEmail": "Outlook-E-Mail",
"searchNumbers": "Telefonnummern hinzufügen",
"searchPeople": "Nach Teilnehmern suchen",
"searchPeopleAndNumbers": "Nach Teilnehmen suchen oder deren Telefonnummern hinzufügen",
"shareInvite": "Einladung zur Versammlung teilen",
"shareLink": "Teilen Sie den Meeting-Link, um andere einzuladen",
"shareStream": "Den Live-Streaming-Link freigeben",
"shareLink": "Teilen Sie den Konferenzlink, um andere einzuladen",
"shareStream": "Den Livestreaminglink freigeben",
"telephone": "Telefon: {{number}}",
"title": "Teilnehmer zu dieser Konferenz einladen"
"title": "Teilnehmer zu dieser Konferenz einladen",
"yahooEmail": "Yahoo-E-Mail"
},
"audioDevices": {
"bluetooth": "Bluetooth",
@@ -40,7 +43,7 @@
"audioOnly": "Geringe Bandbreite"
},
"calendarSync": {
"addMeetingURL": "Meeting-Link hinzufügen",
"addMeetingURL": "Konferenzlink hinzufügen",
"confirmAddLink": "Möchten Sie einen Jitsi-Link zu diesem Termin hinzufügen?",
"error": {
"appConfiguration": "Kalenderintegration ist nicht richtig konfiguriert.",
@@ -89,9 +92,9 @@
"DISCONNECTED": "Getrennt",
"DISCONNECTING": "Verbindung wird getrennt",
"ERROR": "Fehler",
"FETCH_SESSION_ID": "Sitzungs-ID erhalten...",
"FETCH_SESSION_ID": "Sitzungs-ID abrufen ",
"GET_SESSION_ID_ERROR": "Sitzungs-ID-Fehler erhalten: {{code}}",
"GOT_SESSION_ID": "Sitzungs-ID erhalten... Beendet",
"GOT_SESSION_ID": "Sitzungs-ID abrufen … beendet",
"LOW_BANDWIDTH": "Video für {{displayName}} wurde ausgeschaltet, um Bandbreite einzusparen"
},
"connectionindicator": {
@@ -107,6 +110,7 @@
"localaddress_plural": "Lokale Adressen:",
"localport": "Lokaler Port:",
"localport_plural": "Lokale Ports:",
"maxEnabledResolution": "max. senden",
"more": "Mehr anzeigen",
"packetloss": "Paketverlust:",
"quality": {
@@ -139,7 +143,7 @@
"ifHaveApp": "Wenn Sie die App bereits haben:",
"joinInApp": "An dem Meeting teilnehmen mit der App",
"launchWebButton": "Im Web öffnen",
"title": "Die Konferenz wird in {{app}} geöffnet...",
"title": "Die Konferenz wird in {{app}} geöffnet …",
"tryAgainButton": "Erneut mit der nativen Applikation versuchen"
},
"defaultLink": "Bsp.: {{url}}",
@@ -160,6 +164,7 @@
"accessibilityLabel": {
"liveStreaming": "Livestream"
},
"add": "Hinzufügen",
"allow": "Erlauben",
"alreadySharedVideoMsg": "Ein anderer Teilnehmer gibt bereits ein Video weiter. Bei dieser Konferenz ist jeweils nur ein geteiltes Video möglich.",
"alreadySharedVideoTitle": "Nur ein geteiltes Video gleichzeitig",
@@ -174,9 +179,9 @@
"cameraUnsupportedResolutionError": "Die Kamera unterstützt die erforderliche Auflösung nicht.",
"Cancel": "Abbrechen",
"close": "Schließen",
"conferenceDisconnectMsg": "Prüfen Sie allenfalls Ihre Netzwerkverbindung. Verbinde in {{seconds}} Sekunden...",
"conferenceDisconnectMsg": "Prüfen Sie allenfalls Ihre Netzwerkverbindung. Verbinde in {{seconds}} Sekunden …",
"conferenceDisconnectTitle": "Ihre Verbindung ist getrennt worden.",
"conferenceReloadMsg": "Wir versuchen das zu beheben. Verbinde in {{seconds}} Sekunden...",
"conferenceReloadMsg": "Wir versuchen das zu beheben. Verbinde in {{seconds}} Sekunden …",
"conferenceReloadTitle": "Leider ist etwas schiefgegangen.",
"confirm": "Bestätigen",
"confirmNo": "Nein",
@@ -185,21 +190,25 @@
"connectErrorWithMsg": "Oh! Es hat etwas nicht geklappt und der Konferenz konnte nicht beigetreten werden: {{msg}}",
"connecting": "Verbindung wird hergestellt",
"contactSupport": "Support kontaktieren",
"copied": "Kopiert",
"copy": "Kopieren",
"dismiss": "OK",
"displayNameRequired": "Hallo! Wie ist Ihr Name?",
"done": "Fertig",
"e2eeDescription": "Ende-zu-Ende-Verschlüsselung ist derzeit noch EXPERIMENTELL. Bitte beachten Sie, dass das Aktivieren der Ende-zu-Ende-Verschlüsselung diverse serverseitige Funktionen deaktiviert: Aufnahmen, Livestreaming und Telefoneinwahl. Bitte beachten Sie außerdem, dass der Konferenz dann nur noch mit Browsern beigetreten werden kann, die Insertable Streams unterstützen.",
"e2eeLabel": "E2EE-Schlüssel",
"e2eeNoKey": "Keiner",
"e2eeToggleSet": "Schlüssel festlegen",
"e2eeSet": "Setzen",
"e2eeWarning": "WARNUNG: Nicht alle Teilnehmer dieser Konferenz scheinen Ende-zu-Ende-Verschlüsselung zu unterstützen. Wenn Sie diese aktivieren, können die entsprechenden Teilnehmer nichts mehr sehen oder hören.",
"enterDisplayName": "Bitte geben Sie hier Ihren Namen ein",
"error": "Fehler",
"externalInstallationMsg": "Die Bildschirmfreigabe-Erweiterung muss installiert werden.",
"externalInstallationTitle": "Erweiterung erforderlich",
"goToStore": "Zum Store",
"gracefulShutdown": "Der Dienst steht momentan wegen Wartungsarbeiten nicht zur Verfügung. Bitte versuchen Sie es später noch einmal.",
"grantModeratorDialog": "Möchten Sie diesen Teilnehmer wirklich zum Moderator machen?",
"grantModeratorTitle": "Zum Moderator machen",
"IamHost": "Ich bin der Organisator",
"incorrectRoomLockPassword": "Falsches Passwort",
"incorrectPassword": "Benutzername oder Passwort ungültig",
"inlineInstallationMsg": "Die Bildschirmfreigabe-Erweiterung muss installiert werden.",
"inlineInstallExtension": "Jetzt installieren",
"internalError": "Oh! Es hat etwas nicht funktioniert. Der folgende Fehler ist aufgetreten: {{error}}",
"internalErrorTitle": "Interner Fehler",
"kickMessage": "Sie können sich für mehr Details an {{participantDisplayName}} wenden.",
@@ -208,10 +217,11 @@
"kickParticipantTitle": "Teilnehmer entfernen?",
"kickTitle": "Autsch! {{participantDisplayName}} hat Sie aus dem Meeting geworfen",
"liveStreaming": "Livestreaming",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Während einer Aufnahme nicht möglich",
"liveStreamingDisabledForGuestTooltip": "Gäste können kein Livestreaming starten.",
"liveStreamingDisabledTooltip": "Starten des Livestreams deaktiviert.",
"lockMessage": "Die Konferenz konnte nicht gesperrt werden.",
"lockRoom": "Meeting-$t(lockRoomPasswordUppercase) hinzufügen",
"lockRoom": "Konferenz$t(lockRoomPassword) hinzufügen",
"lockTitle": "Sperren fehlgeschlagen",
"logoutQuestion": "Sind Sie sicher, dass Sie sich abmelden und die Konferenz verlassen möchten?",
"logoutTitle": "Abmelden",
@@ -234,13 +244,15 @@
"muteParticipantDialog": "Wollen Sie diesen Teilnehmer wirklich stummschalten? Sie können die Stummschaltung nicht wieder aufheben, der Teilnehmer kann dies aber jederzeit selbst tun.",
"muteParticipantTitle": "Teilnehmer stummschalten?",
"Ok": "OK",
"passwordLabel": "Dieses Meeting wurde von einem Teilnehmer gesichert. Bitte geben Sie das $t(lockRoomPassword) ein, um dem Meeting beizutreten.",
"passwordNotSupported": "Das Festlegen von einem $t(lockRoomPassword) für das Meeting wird nicht unterstützt.",
"passwordLabel": "Dieses Meeting wurde von einem Teilnehmer gesichert. Bitte geben Sie das $t(lockRoomPasswordUppercase) ein, um dem Meeting beizutreten.",
"passwordNotSupported": "Das Festlegen eines Konferenzpassworts wird nicht unterstützt.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) nicht unterstützt",
"passwordRequired": "$t(lockRoomPasswordUppercase) erforderlich",
"popupError": "Ihr Browser blockiert Pop-ups von dieser Website. Bitte aktivieren Sie Pop-ups in den Sicherheitseinstellungen des Browsers und versuchen Sie es erneut.",
"popupErrorTitle": "Pop-up blockiert",
"readMore": "mehr",
"recording": "Aufnahme",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Während eines Livestreams nicht möglich",
"recordingDisabledForGuestTooltip": "Gäste können keine Aufzeichnungen starten.",
"recordingDisabledTooltip": "Start der Aufzeichnung deaktiviert.",
"rejoinNow": "Jetzt erneut beitreten",
@@ -252,17 +264,16 @@
"remoteControlStopMessage": "Die Fernsteuerung wurde beendet!",
"remoteControlTitle": "Fernsteuerung",
"Remove": "Entfernen",
"removePassword": "$t(lockRoomPassword) entfernen",
"removePassword": "$t(lockRoomPasswordUppercase) entfernen",
"removeSharedVideoMsg": "Sind Sie sicher, dass Sie das geteilte Video entfernen möchten?",
"removeSharedVideoTitle": "Freigegebenes Video entfernen",
"reservationError": "Fehler im Reservierungssystem",
"reservationErrorMsg": "Fehler, Nummer: {{code}}, Nachricht: {{msg}}",
"retry": "Wiederholen",
"screenSharingFailedToInstall": "Oh! Die Erweiterung für die Bildschirmfreigabe konnte nicht installiert werden.",
"screenSharingFailedToInstallTitle": "Bildschirmfreigabe-Erweiterung konnte nicht installiert werden",
"screenSharingFirefoxPermissionDeniedError": "Die Bildschirmfreigabe ist leider fehlgeschlagen. Bitte stellen Sie sicher, dass die Berechtigung für die Bildschirmfreigabe im Browser erteilt wurde. ",
"screenSharingFirefoxPermissionDeniedTitle": "Die Bildschirmfreigabe konnte nicht gestartet werden!",
"screenSharingPermissionDeniedError": "Oh! Beim Anfordern der Bildschirmfreigabe-Berechtigungen hat etwas nicht funktioniert. Bitte aktualisieren und erneut versuchen.",
"screenSharingAudio": "Audio teilen",
"screenSharingFailed": "Ups! Beim Teilen des Bildschirms ist etwas schiefgegangen!",
"screenSharingFailedTitle": "Bildschirmfreigabe fehlgeschlagen!",
"screenSharingPermissionDeniedError": "Ups! Etwas stimmt nicht mit Ihren Berechtigungen zur Bildschirmfreigabe. Bitte neu laden und erneut versuchen.",
"sendPrivateMessage": "Sie haben kürzlich eine private Nachricht erhalten. Hatten Sie die Absicht, darauf privat zu antworten, oder wollen Sie Ihre Nachricht an die Gruppe senden?",
"sendPrivateMessageCancel": "An die Gruppe senden",
"sendPrivateMessageOk": "Privat antworten",
@@ -275,13 +286,13 @@
"shareYourScreen": "Bildschirm freigeben",
"shareYourScreenDisabled": "Bildschirmfreigabe deaktiviert.",
"shareYourScreenDisabledForGuest": "Gäste können den Bildschirm nicht freigeben.",
"startLiveStreaming": "Einen Livestream starten",
"startLiveStreaming": "Livestream starten",
"startRecording": "Aufnahme starten",
"startRemoteControlErrorMessage": "Beim Versuch, die Fernsteuerung zu starten, ist ein Fehler aufgetreten!",
"stopLiveStreaming": "Livestreaming stoppen",
"stopLiveStreaming": "Livestream stoppen",
"stopRecording": "Aufnahme stoppen",
"stopRecordingWarning": "Sind Sie sicher, dass Sie die Aufnahme stoppen möchten?",
"stopStreamingWarning": "Sind Sie sicher, dass Sie das Livestreaming stoppen möchten?",
"stopStreamingWarning": "Sind Sie sicher, dass Sie den Livestream stoppen möchten?",
"streamKey": "Streamschlüssel",
"Submit": "OK",
"thankYou": "Danke für die Verwendung von {{appName}}!",
@@ -289,14 +300,13 @@
"tokenAuthFailed": "Sie sind nicht berechtigt, dieser Konferenz beizutreten.",
"tokenAuthFailedTitle": "Authentifizierung fehlgeschlagen",
"transcribing": "Wird transkribiert",
"unlockRoom": "Meeting-$t(lockRoomPassword) entfernen",
"unlockRoom": "Konferenz$t(lockRoomPassword) entfernen",
"userPassword": "Benutzerpasswort",
"WaitForHostMsg": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Wenn Sie der Organisator sind, authentifizieren Sie sich. Warten Sie andernfalls, bis der Organisator erscheint.",
"WaitForHostMsgWOk": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Wenn Sie der Organisator sind, drücken Sie zum Authentifizieren auf OK. Warten Sie andernfalls, bis der Organisator erscheint.",
"WaitingForHost": "Warten auf den Organisator...",
"WaitingForHost": "Warten auf den Organisator …",
"Yes": "Ja",
"yourEntireScreen": "Ganzer Bildschirm",
"screenSharingAudio": "Audio austauschen"
"yourEntireScreen": "Ganzer Bildschirm"
},
"dialOut": {
"statusMessage": "ist jetzt {{status}}"
@@ -304,6 +314,12 @@
"documentSharing": {
"title": "Freigegebenes Dokument"
},
"e2ee": {
"labelToolTip": "Audio- und Videodaten dieser Unterhaltung sind jetzt zwischen den Teilnehmern verschlüsselt"
},
"embedMeeting": {
"title": "Diese Konferenz einbetten"
},
"feedback": {
"average": "Durchschnittlich",
"bad": "Schlecht",
@@ -322,8 +338,8 @@
},
"info": {
"accessibilityLabel": "Informationen anzeigen",
"addPassword": "$t(lockRoomPassword) hinzufügen",
"cancelPassword": "$t(lockRoomPassword) löschen",
"addPassword": "$t(lockRoomPasswordUppercase) hinzufügen",
"cancelPassword": "$t(lockRoomPasswordUppercase) löschen",
"conferenceURL": "Link:",
"country": "Land",
"dialANumber": "Um am Meeting teilzunehmen, müssen Sie eine dieser Nummern wählen und dann die PIN eingeben.",
@@ -335,7 +351,7 @@
"genericError": "Es ist leider etwas schiefgegangen.",
"inviteLiveStream": "Klicken Sie auf {{url}}, um den Livestream dieser Konferenz zu öffnen",
"invitePhone": "Wenn Sie stattdessen per Telefon beitreten möchten, wählen sie: {{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "Suchen Sie nach einer anderen Einwahlnummer ?\nMeeting-Einwahlnummern anzeigen: {{url}}\n\n\nWenn Sie sich auch über ein Raumtelefon einwählen, nehmen Sie teil, ohne sich mit dem Ton zu verbinden: {{silentUrl}}",
"invitePhoneAlternatives": "Suchen Sie nach einer anderen Einwahlnummer ?\nEinwahlnummern der Konferenz anzeigen: {{url}}\n\n\nWenn Sie sich auch über ein Raumtelefon einwählen, nehmen Sie teil, ohne sich mit dem Ton zu verbinden: {{silentUrl}}",
"inviteURLFirstPartGeneral": "Sie wurden zur Teilnahme an einem Meeting eingeladen.",
"inviteURLFirstPartPersonal": "{{name}} lädt Sie zu einem Meeting ein.\n",
"inviteURLSecondPart": "\nAm Meeting teilnehmen:\n{{url}}\n",
@@ -348,7 +364,7 @@
"password": "$t(lockRoomPasswordUppercase):",
"title": "Teilen",
"tooltip": "Freigabe-Link und Einwahlinformationen für dieses Meeting",
"label": "Meeting-Informationen"
"label": "Konferenzinformationen"
},
"inviteDialog": {
"alertText": "Die Einladung einiger Teilnehmer ist fehlgeschlagen.",
@@ -382,6 +398,8 @@
"videoQuality": "Anrufqualität verwalten"
},
"liveStreaming": {
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihr Stream auf {{limit}} min. begrenzt. Für unlimitiertes Streaming nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Ihr Stream ist begrenzt auf {{limit}} min. Für unlimitiertes Streaming, nutzen Sie bitte {{app}}.",
"busy": "Es werden Ressourcen zum Streamen bereitgestellt. Bitte in ein paar Minuten erneut versuchen.",
"busyTitle": "Alle Streaming-Instanzen sind in Gebrauch",
"changeSignIn": "Konten wechseln.",
@@ -391,17 +409,17 @@
"error": "Das Livestreaming ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
"errorAPI": "Beim Abrufen der YouTube-Livestreams ist ein Fehler aufgetreten. Bitte versuchen Sie, sich erneut anzumelden.",
"errorLiveStreamNotEnabled": "Livestreaming ist für {{email}} nicht aktiviert. Aktivieren Sie das Livestreaming oder melden Sie sich bei einem Konto mit aktiviertem Livestreaming an.",
"expandedOff": "Livestreaming wurde angehalten",
"expandedOff": "Livestream wurde angehalten",
"expandedOn": "Das Meeting wird momentan an YouTube gestreamt.",
"expandedPending": "Livestreaming wird gestartet...",
"failedToStart": "Livestreaming konnte nicht gestartet werden",
"expandedPending": "Livestream wird gestartet …",
"failedToStart": "Livestream konnte nicht gestartet werden",
"getStreamKeyManually": "Wir waren nicht in der Lage, Livestreams abzurufen. Versuchen Sie, Ihren Livestream-Schlüssel von YouTube zu erhalten.",
"invalidStreamKey": "Der Livestream-Schlüssel ist u. U. falsch.",
"off": "Livestreaming gestoppt",
"offBy": "{{name}} stoppte das Livestreaming",
"on": "Livestreaming",
"onBy": "{{name}} startete das Livestreaming",
"pending": "Livestream wird gestartet...",
"off": "Livestream gestoppt",
"offBy": "{{name}} stoppte den Livestream",
"on": "Livestream",
"onBy": "{{name}} startete den Livestream",
"pending": "Livestream wird gestartet …",
"serviceName": "Livestreaming-Dienst",
"signedInAs": "Sie sind derzeit angemeldet als:",
"signIn": "Mit Google anmelden",
@@ -442,7 +460,7 @@
"stop": "Aufnahme stoppen",
"yes": "Ja"
},
"lockRoomPassword": "Passwort",
"lockRoomPassword": "passwort",
"lockRoomPasswordUppercase": "Passwort",
"me": "ich",
"notify": {
@@ -474,11 +492,51 @@
"unmute": "Stummschaltung aufheben",
"newDeviceCameraTitle": "Neue Kamera erkannt",
"newDeviceAudioTitle": "Neues Audiogerät erkannt",
"newDeviceAction": "Verwenden"
"newDeviceAction": "Verwenden",
"OldElectronAPPTitle": "Sicherheitslücke!",
"oldElectronClientDescription1": "Sie scheinen eine alte Version des Jitsi-Meet-Clients zu nutzen. Diese hat bekannte Schwachstellen. Bitte aktualisieren Sie auf unsere ",
"oldElectronClientDescription2": "aktuelle Version",
"oldElectronClientDescription3": "!"
},
"passwordSetRemotely": "von einem anderen Teilnehmer gesetzt",
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
"poweredby": "Betrieben von",
"prejoin": {
"audioAndVideoError": "Audio- und Videofehler:",
"audioOnlyError": "Audiofehler:",
"audioTrackError": "Audiotrack konnte nicht erstellt werden.",
"calling": "Rufaufbau",
"callMe": "Mich anrufen",
"callMeAtNumber": "Mich unter dieser Nummer anrufen:",
"configuringDevices": "Geräte werden eingerichtet …",
"connectedWithAudioQ": "Sie sind mit Audio verbunden?",
"copyAndShare": "Konferenzlink kopieren & teilen",
"dialInMeeting": "Telefoneinwahl",
"dialInPin": "In die Konferenz einwählen und PIN eingeben:",
"dialing": "Wählen",
"doNotShow": "Nicht mehr anzeigen",
"errorDialOut": "Anruf fehlgeschlagen",
"errorDialOutDisconnected": "Anruf fehlgeschlagen. Verbindungsabbruch",
"errorDialOutFailed": "Anruf fehlgeschlagen. Anruf fehlgeschlagen",
"errorDialOutStatus": "Fehler beim Abrufen des Anrufstatus",
"errorStatusCode": "Anruf fehlgeschlagen. Statuscode: {{status}}",
"errorValidation": "Nummerverifikation fehlgeschlagen",
"iWantToDialIn": "Ich möchte mich einwählen",
"joinAudioByPhone": "Per Telefon teilnehmen",
"joinMeeting": "Konferenz beitreten",
"joinWithoutAudio": "Ohne Ton beitreten",
"initiated": "Anruf gestartet",
"linkCopied": "Link in die Zwischenablage kopiert",
"lookGood": "Ihr Mikrofon scheint zu funktionieren.",
"or": "oder",
"premeeting": "Vorraum",
"showScreen": "Konferenzvorraum aktivieren",
"startWithPhone": "Mit Telefonaudio starten",
"screenSharingError": "Fehler bei Bildschirmfreigabe:",
"videoOnlyError": "Videofehler:",
"videoTrackError": "Videotrack konnte nicht erstellt werden.",
"viewAllNumbers": "alle Nummern anzeigen"
},
"presenceStatus": {
"busy": "Beschäftigt",
"calling": "Wird angerufen …",
@@ -501,6 +559,8 @@
},
"raisedHand": "Ich möchte sprechen",
"recording": {
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} min begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <3>{{app}}</3>.",
"authDropboxText": "In Dropbox hochladen",
"availableSpace": "Verfügbarer Speicherplatz: {{spaceLeft}} MB (ca. {{duration}} Minuten Aufzeichnung)",
"beta": "BETA",
@@ -511,7 +571,7 @@
"expandedOn": "Das Meeting wird momentan aufgezeichnet.",
"expandedPending": "Aufzeichnung wird gestartet…",
"failedToStart": "Die Aufnahme konnte nicht gestartet werden",
"fileSharingdescription": "Aufzeichnung mit Meeting-Teilnehmer teilen",
"fileSharingdescription": "Aufzeichnung mit Konferenzteilnehmer teilen",
"live": "LIVE",
"loggedIn": "Als {{userName}} angemeldet",
"off": "Aufnahme gestoppt",
@@ -531,7 +591,8 @@
"pullToRefresh": "Ziehen, um zu aktualisieren"
},
"security": {
"about": "Sie können einen Passwort zu Ihrer Sitzung hinzufügen. Die Teilnehmer müssen dieses ebenfalls eingeben, bevor sie an der Sitzung teilnehmen dürfen",
"about": "Sie können Ihre Konferenz mit einem Passwort sichern. Teilnehmer müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.",
"aboutReadOnly": "Moderatoren können die Konferenz mit einem Passwort sichern. Teilnehmer müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.",
"insecureRoomNameWarning": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten",
"securityOptions": "Sicherheitsoptionen"
},
@@ -563,12 +624,15 @@
"settingsView": {
"advanced": "Erweitert",
"alertOk": "OK",
"alertCancel": "Abbrechen",
"alertTitle": "Warnung",
"alertURLText": "Die angegebene Server-URL ist ungültig",
"buildInfoSection": "Build-Informationen",
"conferenceSection": "Konferenz",
"disableCallIntegration": "Native Anrufintegration deaktivieren",
"disableP2P": "Ende-zu-Ende-Modus deaktivieren",
"disableCrashReporting": "Absturzberichte deaktivieren",
"disableCrashReportingWarning": "Möchten Sie die Absturzberichte wirklich deaktivieren? Diese Einstellung wird nach einem Neustart der App wirksam.",
"displayName": "Anzeigename",
"email": "E-Mail",
"header": "Einstellungen",
@@ -610,14 +674,18 @@
"chat": "Chatfenster ein-/ausblenden",
"document": "Geteiltes Dokument schließen",
"download": "Unsere Apps herunterladen",
"embedMeeting": "Konferenz einbetten",
"e2ee": "Ende-zu-Ende-Verschlüsselung",
"feedback": "Feedback hinterlassen",
"fullScreen": "Vollbildmodus aktivieren/deaktivieren",
"fullScreen": "Vollbildmodus ein-/ausschalten",
"grantModerator": "Zum Moderator machen",
"hangup": "Anruf beenden",
"help": "Hilfe",
"invite": "Teilnehmer einladen",
"kick": "Teilnehmer entfernen",
"lobbyButton": "Lobbymodus ein-/ausschalten",
"localRecording": "Lokale Aufzeichnungssteuerelemente ein-/ausschalten",
"lockRoom": "Meeting-Passwort ein-/auschalten",
"lockRoom": "Konferenzpasswort ein-/auschalten",
"moreActions": "Menü „Weitere Aktionen“ ein-/ausschalten",
"moreActionsMenu": "Menü „Weitere Aktionen“",
"moreOptions": "Menü „Weitere Optionen“",
@@ -639,6 +707,7 @@
"speakerStats": "Sprecherstatistik ein-/ausblenden",
"tileView": "Kachelansicht ein-/ausschalten",
"toggleCamera": "Kamera wechseln",
"toggleFilmstrip": "Miniaturansichten ein-/ausschalten",
"videomute": "„Video stummschalten“ ein-/ausschalten",
"videoblur": "Video-Unschärfe ein-/ausschalten"
},
@@ -653,6 +722,8 @@
"documentClose": "Geteiltes Dokument schließen",
"documentOpen": "Geteiltes Dokument öffnen",
"download": "Unsere Apps herunterladen",
"e2ee": "Ende-zu-Ende-Verschlüsselung",
"embedMeeting": "Konferenz einbetten",
"enterFullScreen": "Vollbildmodus",
"enterTileView": "Kachelansicht einschalten",
"exitFullScreen": "Vollbildmodus verlassen",
@@ -661,6 +732,8 @@
"hangup": "Verlassen",
"help": "Hilfe",
"invite": "Teilnehmer einladen",
"lobbyButtonDisable": "Lobbymodus deaktivieren",
"lobbyButtonEnable": "Lobbymodus aktivieren",
"login": "Anmelden",
"logout": "Abmelden",
"lowerYourHand": "Hand senken",
@@ -755,6 +828,7 @@
"domute": "Stummschalten",
"domuteOthers": "Alle anderen stummschalten",
"flip": "Spiegeln",
"grantModerator": "Zum Moderator machen",
"kick": "Hinauswerfen",
"moderator": "Moderator",
"mute": "Teilnehmer ist stumm geschaltet",
@@ -768,7 +842,7 @@
"join": "Zum Teilnehmen tippen",
"roomname": "Konferenzname eingeben"
},
"appDescription": "Auf geht's! Starten Sie eine Videokonferenz mit dem ganzen Team. Oder besser noch: Laden Sie alle ein, die Sie kennen. {{app}} ist eine vollständig verschlüsselte, aus 100 % Open-Source-Software bestehende Videokonferenzlösung, die Sie den ganzen Tag kostenlos verwenden können ohne Registrierung.",
"appDescription": "Auf geht's! Starten Sie eine Videokonferenz mit ihrem Team oder besser noch: Laden Sie alle ein, die Sie kennen. {{app}} ist eine vollständig verschlüsselte und 100 % quelloffene Videokonferenzlösung, die Sie immer und überall kostenlos verwenden können ohne Registrierung.",
"audioVideoSwitch": {
"audio": "Audio",
"video": "Video"
@@ -777,24 +851,62 @@
"connectCalendarButton": "Kalender verbinden",
"connectCalendarText": "Verbinden Sie Ihren Kalender, um all Ihre Meetings in {{app}} anzuzeigen. Fügen Sie zudem {{provider}}-Meetings in Ihren Kalender ein und starten Sie sie mit nur einem Klick.",
"enterRoomTitle": "Neues Meeting starten",
"roomNameAllowedChars": "Der Meeting-Name sollte keines der folgenden Zeichen enthalten: ?, &, :, ', \", %, #.",
"getHelp": "Hilfe",
"go": "Los",
"goSmall": "Los",
"join": "Beitreten",
"info": "Informationen",
"join": "ERSTELLEN / BEITRETEN",
"moderatedMessage": "Oder <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">reservieren Sie sich eine Konferenz-URL</a>, unter der Sie der einzige Moderator sind.",
"privacy": "Datenschutz",
"recentList": "Letzte",
"recentList": "Verlauf",
"recentListDelete": "Löschen",
"recentListEmpty": "Die Liste „Letzte“ ist momentan leer. Chatten Sie mit Ihrem Team. Sie finden all Ihre letzten Meetings hier.",
"recentListEmpty": "Ihr Konferenzverlauf ist derzeit leer. Reden Sie mit Ihrem Team und Ihre vergangenen Konferenzen landen hier.",
"reducedUIText": "Willkommen bei {{app}}!",
"roomNameAllowedChars": "Der Konferenzname sollte keines der folgenden Zeichen enthalten: ?, &, :, ', \", %, #.",
"roomname": "Konferenzname eingeben",
"roomnameHint": "Name oder URL der Konferenz, der Sie beitreten möchten. Sie können einen Namen erfinden, er muss nur den anderen Teilnehmern übermittelt werden, damit diese der gleichen Konferenz beitreten.",
"sendFeedback": "Feedback senden",
"terms": "AGB",
"title": "Sichere, mit umfassenden Funktionen ausgestattete und vollkommen kostenlose Videokonferenzen"
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen"
},
"lonelyMeetingExperience": {
"button": "Andere einladen",
"youAreAlone": "Nur Sie sind in diesem Meeting"
"youAreAlone": "Sie sind alleine in dieser Konferenz"
},
"helpView": {
"header": "Hilfecenter"
},
"lobby": {
"knockingParticipantList": "Liste anklopfender Teilnehmer",
"allow": "Annehmen",
"backToKnockModeButton": "Kein Passwort, stattdessen Beitritt anfragen",
"dialogTitle": "Lobbymodus",
"disableDialogContent": "Lobbymodus derzeit deaktiviert. Diese Funktion stellt sicher, dass unerwünschte Personen Ihrer Konferenz nicht beitreten können. Funktion aktivieren?",
"disableDialogSubmit": "Deaktivieren",
"emailField": "E-Mail-Adresse eingeben",
"enableDialogPasswordField": "Passwort setzen (optional)",
"enableDialogSubmit": "Aktivieren",
"enableDialogText": "Mit dem Lobbymodus schützen Sie Ihre Konferenz, da nur von einem Moderator angenommene Teilnehmer beitreten können.",
"enterPasswordButton": "Konferenzpasswort eingeben",
"enterPasswordTitle": "Passwort zum Beitreten benutzen",
"invalidPassword": "Ungültiges Passwort",
"joiningMessage": "Sie treten der Konferenz bei, sobald jemand Ihre Anfrage annimmt.",
"joinWithPasswordMessage": "Beitrittsversuch mit Passwort, bitte warten …",
"joinRejectedMessage": "Ihr Beitrittsanfrage wurde von einem Moderator abgelehnt.",
"joinTitle": "Konferenz beitreten",
"joiningTitle": "Beitritt anfragen …",
"joiningWithPasswordTitle": "Mit Passwort beitreten …",
"knockButton": "Beitritt anfragen",
"knockTitle": "Jemand möchte der Konferenz beitreten",
"nameField": "Geben Sie Ihren Namen ein",
"notificationLobbyAccessDenied": "{{targetParticipantName}} wurde von {{originParticipantName}} der Zutritt verwehrt",
"notificationLobbyAccessGranted": "{{targetParticipantName}} wurde von {{originParticipantName}} der Zutritt gestattet",
"notificationLobbyDisabled": "{{originParticipantName}} hat die Lobby deaktiviert",
"notificationLobbyEnabled": "{{originParticipantName}} hat die Lobby aktiviert",
"notificationTitle": "Lobby",
"passwordField": "Konferenzpasswort eingeben",
"passwordJoinButton": "Beitreten",
"reject": "Ablehnen",
"toggleLabel": "Lobby aktivieren"
}
}

View File

@@ -1,21 +1,36 @@
{
"addPeople": {
"add": "Προσκάλεσε",
"addContacts": "Προσκάλεσε τις επαφές σου",
"copyInvite": "Αντίγραψε την πρόσκληση της συνάντησης",
"copyLink": "Αντίγραψε το σύνδεσμο της συνάντησης",
"copyStream": "Αντίγραψε το σύνδεσμο της ζωντανής μετάδοσης",
"countryNotSupported": "Δεν υποστηρίζουμε αυτόν τον προορισμό ακόμα.",
"countryReminder": "Κλήση εκτός ΗΠΑ; Παρακαλώ βεβαιωθείτε ότι ξεκινάτε με τον κωδικό της χώρας!",
"defaultEmail": "Το προεπιλεγμένο Email σου",
"disabled": "Δεν μπορείτε να προσκαλέσετε άτομα.",
"failedToAdd": "Αποτυχία προσθήκης συμμετεχόντων",
"footerText": "Η κλήση είναι απενεργοποιημένη.",
"googleEmail": "Google Email",
"inviteMoreHeader": "Είσαι ο μόναδικός συμμετέχων στη συνάντηση",
"inviteMoreMailSubject": "Συμμετοχή στη συνάντηση {{appName}}",
"inviteMorePrompt": "Πρόσκληση συμμετεχόντων",
"linkCopied": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο",
"loading": "Αναζήτηση για ανθρώπους και αριθμούς τηλεφώνου",
"loadingNumber": "Ο αριθμός τηλεφώνου επικυρώνεται",
"loadingPeople": "Γίνεται αναζήτηση για ανθρώπους που θα καλεστούν",
"noResults": "Δε βρέθηκαν αποτελέσματα αναζήτησης",
"outlookEmail": "Outlook Email",
"noValidNumbers": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου",
"searchNumbers": "Προσθέστε αριθμούς τηλεφώνου",
"searchPeople": "Αναζήτηση για ανθρώπους",
"searchPeopleAndNumbers": "Αναζήτηση για ανθρώπους ή προσθήκη των αριθμών τηλεφώνου τους",
"shareInvite": "Κοινή χρήση πρόσκλησης συνάντησης",
"shareLink": "Κοινή χρήση συνδέσμου συνάντησης για πρόσκληση άλλων",
"shareStream": "Κοινή χρήση του συνδέσμου ζωντανής μετάδοσης",
"telephone": "Τηλέφωνο: {{number}}",
"title": "Καλέστε ανθρώπους σε αυτή τη συνάντηση"
"title": "Καλέστε ανθρώπους σε αυτή τη συνάντηση",
"yahooEmail": "Yahoo Email"
},
"audioDevices": {
"bluetooth": "Bluetooth",
@@ -79,7 +94,7 @@
"ERROR": "Σφάλμα",
"FETCH_SESSION_ID": "Απόκτηση session-id...",
"GET_SESSION_ID_ERROR": "Λήψη session-id σφάλματος: {{code}}",
"GOT_SESSION_ID": "Απόκτηση session-id... Κάνει",
"GOT_SESSION_ID": "Απόκτηση session-id... Έγινε",
"LOW_BANDWIDTH": "Το βίντεο για το {{displayName}} έχει απενεργοποιηθεί για να εξοικονομήσετε εύρος ζώνης"
},
"connectionindicator": {
@@ -98,9 +113,9 @@
"more": "Εμφάνιση περισσότερων",
"packetloss": "Απώλεια πακέτων:",
"quality": {
"good": "Καλά",
"inactive": "Ανενεργά",
"lost": "Χαμένα",
"good": "Καλή",
"inactive": "Ανενεργό",
"lost": "Χαμένη",
"nonoptimal": "Μέτρια",
"poor": "Κακή"
},
@@ -123,8 +138,10 @@
"description": "Δεν έγινε τίποτα; Προσπαθήσαμε να κάνουμε έναρξη σύσκεψης στο {{app}} desktop app. Προσπαθήστε ξανά ή ξεκινήστε το {{app}} web app.",
"descriptionWithoutWeb": "Δεν έγινε τίποτα; Προσπαθήσαμε να κάνουμε έναρξη σύσκεψης στο {{app}} desktop app.",
"downloadApp": "Κατεβάστε την εφαρμογή",
"ifDoNotHaveApp": "If you don't have the app yet:",
"ifHaveApp": "If you already have the app:",
"joinInApp": "Join this meeting using the app",
"launchWebButton": "Έναρξη στο web",
"openApp": "Συνεχίστε στην εφαρμογή",
"title": "Γίνεται έναρξη της συνάντησής σας στο {{app}}...",
"tryAgainButton": "Προσπαθήστε ξανά στην επιφάνεια εργασίας"
},
@@ -146,6 +163,7 @@
"accessibilityLabel": {
"liveStreaming": "Ζωντανή ροή"
},
"add": "Add",
"allow": "Επίτρεψε",
"alreadySharedVideoMsg": "Ένας άλλος συμμετέχων κάνει ήδη κοινή προβολή βίντεο. Η διάσκεψη αυτή επιτρέπει μόνο ένα κοινόχρηστο βίντεο τη φορά.",
"alreadySharedVideoTitle": "Μόνο ένα κοινόχρηστο βίντεο επιτρέπεται τη φορά",
@@ -174,22 +192,18 @@
"copy": "Αντιγραφή",
"dismiss": "Απόρριψη",
"displayNameRequired": "Γεια σου! Ποιο είναι το όνομα σου;",
"done": "Κάνει",
"e2eeDescription": "<p>Η από άκρη σε άκρη κρυπτογράφηση είναι σήμερα <strong>σε ΠΕΙΡΑΜΑΤΙΚΟ στάδιο</strong>. Παρακαλώ δείτε <a href='https://jitsi.org/blog/e2ee/' target='_blank'>αυτήν την ανάρτηση</a> για λεπτομέρειες.</p><br/><p>Παρακαλώ να έχετε κατά νου ότι η ενεργοποίηση της από άκρη σε άκρη κρυπτογράφησης θα απενεργοποιήσει από την πλευρά του διακομιστή υπηρεσίες όπως: καταγραφή, live streaming και συμμετοχή μέσω τηλεφώνου. Επίσης, να έχετε κατά νου ότι η συνάντηση θα λειτουργήσει μόνο για τους ανθρώπους που συνδέονται από φυλλομετρητές με υποστήριξη για insertable streams.</p>",
"e2eeLabel": "Κλειδί",
"e2eeTitle": "Από άκρη σε άκρη κρυπτογράφηση",
"e2eeWarning": "<br /><p><strong>ΠΡΟΕΙΔΟΠΟΊΗΣΗ:</strong> Δε φαίνεται να έχουν όλοι οι συμμετέχοντες στη συνάντηση αυτή υποστήριξη για από άκρη σε άκρη κρυπτογράφηση. Αν την ενεργοποιήσετε, δεν θα μπορέσουν να σας δουν ούτε να σας ακούσουν.</p>",
"done": "Έγινε",
"e2eeDescription": "Η από άκρη σε άκρη κρυπτογράφηση είναι σήμερα σε ΠΕΙΡΑΜΑΤΙΚΟ στάδιο. Παρακαλώ να έχετε κατά νου ότι η ενεργοποίηση της από άκρη σε άκρη κρυπτογράφησης θα απενεργοποιήσει από την πλευρά του διακομιστή υπηρεσίες όπως: καταγραφή, live streaming και συμμετοχή μέσω τηλεφώνου. Επίσης, να έχετε κατά νου ότι η συνάντηση θα λειτουργήσει μόνο για τους ανθρώπους που συνδέονται από φυλλομετρητές με υποστήριξη για insertable streams.",
"e2eeNoKey": "None",
"e2eeSet": "Set",
"e2eeToggleSet": "Set key",
"e2eeWarning": "ΠΡΟΕΙΔΟΠΟΊΗΣΗ: Δε φαίνεται να έχουν όλοι οι συμμετέχοντες στη συνάντηση αυτή υποστήριξη για από άκρη σε άκρη κρυπτογράφηση. Αν την ενεργοποιήσετε, δεν θα μπορέσουν να σας δουν ούτε να σας ακούσουν.",
"enterDisplayName": "Παρακαλώ εισάγετε το όνομά σας εδώ",
"error": "Σφάλμα",
"externalInstallationMsg": "Θα πρέπει να εγκαταστήσετε την επέκτασή μας για διαμοιρασμό επιφάνειας εργασίας.",
"externalInstallationTitle": "Απαιτείται επέκταση",
"goToStore": "Μετάβαση στο webstore",
"gracefulShutdown": "Μας υπηρεσία είναι προς το παρόν εκτός λειτουργίας για συντήρηση. Παρακαλώ προσπαθήστε ξανά αργότερα.",
"IamHost": "Είμαι ο οικοδεσπότης",
"incorrectRoomLockPassword": "Εσφαλμένος κωδικός πρόσβασης",
"incorrectPassword": "Λανθασμένο όνομα χρήστη ή κωδικός πρόσβασης",
"inlineInstallationMsg": "Θα πρέπει να εγκαταστήσετε την επέκτασή μας για διαμοιρασμό επιφάνειας εργασίας.",
"inlineInstallExtension": "Εγκαταστήστε τώρα",
"internalError": "Ουπς! Κάτι πήγε στραβά. Παρουσιάστηκε το παρακάτω σφάλμα: {{error}}",
"internalErrorTitle": "Εσωτερικό σφάλμα",
"kickMessage": "Μπορείτε να επικοινωνήσετε με το {{participantDisplayName}} για περισσότερες λεπτομέρειες.",
@@ -198,6 +212,7 @@
"kickParticipantTitle": "Θέλετε να αποβάλετε αυτόν τον συμμετέχοντα;",
"kickTitle": "Ωχ! Ο/Η {{participantDisplayName}} σας απέβαλε από τη διάσκεψη",
"liveStreaming": "Ζωντανή ροή",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Not possible while recording is active",
"liveStreamingDisabledForGuestTooltip": "Οι επισκέπτες δεν μπορούν να ξεκινήσουν τη ζωντανή ροή",
"liveStreamingDisabledTooltip": "Έναρξη ζωντανής ροής απενεργοποιημένη",
"lockMessage": "Αποτυχία κλειδώματος της διάσκεψης.",
@@ -231,6 +246,7 @@
"popupError": "Ο φυλλομετρητής σας μπλοκάρει τα pop-up windows από αυτό το site. Παρακαλούμε ενεργοποιήστε τα pop-ups στις ρυθμίσεις ασφαλείας του προγράμματος περιήγησής σας και προσπαθήστε ξανά.",
"popupErrorTitle": "Pop-up μπλοκαρίστηκε",
"recording": "Γίνεται εγγραφή",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
"recordingDisabledForGuestTooltip": "Οι επισκέπτες δεν μπορούν να ξεκινήσουν τις ηχογραφήσεις.",
"recordingDisabledTooltip": "Έναρξη εγγραφής απενεργοποιημένη.",
"rejoinNow": "Επανασύνδεση τώρα",
@@ -251,8 +267,6 @@
"screenSharingAudio": "Διαμοιρασμός ήχου",
"screenSharingFailedToInstall": "Ουπς! Η εγκατάσταση της επέκταση κοινής χρήσης οθόνης απέτυχε.",
"screenSharingFailedToInstallTitle": "Η εγκατάσταση της επέκταση κοινής χρήσης οθόνης απέτυχε",
"screenSharingFirefoxPermissionDeniedError": "Κάτι πήγε στραβά ενώ προσπαθούσατε να μοιραστείτε την οθόνη σας. Παρακαλούμε βεβαιωθείτε ότι μας έχετε δώσει την άδεια να το πράξουμε.",
"screenSharingFirefoxPermissionDeniedTitle": "Ουπς! Δεν ήμασταν σε θέση να ξεκινήσουμε την κοινή χρήση οθόνης!",
"screenSharingPermissionDeniedError": "Ουπς! Κάτι πήγε στραβά με τα δικαιώματα της επέκτασης κοινής χρήσης οθόνης. Παρακαλώ ξαναφορτώστε και προσπαθήστε ξανά.",
"sendPrivateMessage": "Πρόσφατα λάβατε ένα προσωπικό μήνυμα. Σκοπεύετε να απαντήσετε σε αυτό ιδιωτικά ή θέλετε να στείλετε το μήνυμά σας στην ομάδα;",
"sendPrivateMessageCancel": "Στείλτε στην ομάδα",
@@ -390,6 +404,8 @@
"failedToStart": "Η ζωντανή ροή απέτυχε να ξεκινήσει",
"getStreamKeyManually": "Δεν ήμασταν σε θέση να φέρουμε κάποια ζωντανή ροή. Προσπαθήστε να πάρετε το κλειδί της ζωντανής ροής από το YouTube.",
"invalidStreamKey": "Το κλειδί της ζωντανής ροής μπορεί να είναι εσφαλμένο.",
"limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.",
"limitNotificationDescriptionWeb": "Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Η ζωντανή ροή σταμάτησε",
"offBy": "Ο/Η {{name}} σταμάτησε τη ζωντανή ροή",
"on": "Ζωντανή ροή",
@@ -476,6 +492,40 @@
"passwordSetRemotely": "ορίστηκε από άλλον συμμετέχοντα",
"passwordDigitsOnly": "Έως {{number}} ψηφία",
"poweredby": "με τη δύναμη του",
"prejoin": {
"audioAndVideoError": "Σφάλμα ήχου και βίντεο:",
"audioOnlyError": "Σφάλμα ήχου:",
"audioTrackError": "Δεν ήταν δυνατή η δημιουργία κομματιού ήχου.",
"callMe": "Κάλεσέ με",
"callMeAtNumber": "Κάλεσέ με σε αυτό το νούμερο:",
"configuringDevices": "Γίνεται παραμετροποίηση συσκευών...",
"connectedWithAudioQ": "Είστε συνδεδεμένοι με ήχο;",
"copyAndShare": "Αντιγραφή και κοινή χρήση συνδέσμου συνάντησης",
"dialInMeeting": "Κλήση στη συνάντηση",
"dialInPin": "Κλήση στη συνάντηση και εισαγωγή κωδικού PIN:",
"dialing": "Γίνεται κλήση",
"doNotShow": "Να μην εμφανιστεί αυτό ξανά",
"errorDialOut": "Η κλήση δεν ήταν δυνατή",
"errorDialOutDisconnected": "Η κλήση δεν ήταν δυνατή. Έγινε αποσύνδεση",
"errorDialOutFailed": "Η κλήση δεν ήταν δυνατή. Η κλήση απέτυχε",
"errorDialOutStatus": "Σφάλμα λήψης κατάστασης κλήσης",
"errorStatusCode": "Σφάλμα κλήσης, κωδικός κατάστασης: {{status}}",
"errorValidation": "Η επικύρωση του αριθμού απέτυχε",
"iWantToDialIn": "Θέλω να κάνω κλήση",
"joinAudioByPhone": "Συμμετοχή με ήχο τηλεφώνου",
"joinMeeting": "Συμμετοχή στη συνάντηση",
"joinWithoutAudio": "Συμμετοχή χωρίς ήχο",
"initiated": "Η κλήση ξεκίνησε",
"linkCopied": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο",
"lookGood": "Ακούγεται ότι το μικρόφωνο σας λειτουργεί άψογα",
"or": "ή",
"calling": "Γίνεται κλήση",
"startWithPhone": "Έναρξη με ήχο τηλεφώνου",
"screenSharingError": "Σφάλμα διαμοιρασμού οθόνης:",
"videoOnlyError": "Σφάλμα βίντεο:",
"videoTrackError": "Δεν ήταν δυνατή η δημιουργία κομματιού βίντεο.",
"viewAllNumbers": "προβολή όλων των αριθμών"
},
"presenceStatus": {
"busy": "Απασχολημένος",
"calling": "Γίνεται κλήση...",
@@ -498,6 +548,8 @@
},
"raisedHand": "Θα ήθελα να μιλήσω",
"recording": {
"limitNotificationDescriptionWeb": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε το <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε <3>{{app}}</3>.",
"authDropboxText": "Ανεβάστε στο Dropbox",
"availableSpace": "Διαθέσιμος χώρος: {{spaceLeft}} MB (περίπου {{duration}} λεπτά εγγραφής)",
"beta": "BETA",
@@ -527,6 +579,11 @@
"sectionList": {
"pullToRefresh": "Τραβήξτε για να ανανεώσετε"
},
"security": {
"about": "Έχετε τη δυνατότητα να προσθέσετε κωδικό στη συνάντησή σας. Οι συμμετέχοντες θα πρέπει να τον εισάγουν για να τους δοθεί πρόσβαση στη συνάντηση.",
"insecureRoomNameWarning": "Το όνομα του διαδρόμου δεν είναι ασφαλές. Ανεπιθύμητοι συμμετέχοντες μπορεί να συμμετάσχουν στη συνάντησή σας. Σκεφτείτε το να ασφαλίσετε τη συνάντηση σας χρησιμοποιώντας το κουμπί Ασφάλεια.",
"securityOptions": "Επιλογές ασφαλείας"
},
"settings": {
"calendar": {
"about": "H σύνδεση ημερολογίου του {{appName}} χρησιμοποιείται για την ασφαλή πρόσβαση του ημερολογίου σας, ώστε να μπορεί να διαβάσει τις επερχόμενες εκδηλώσεις.",
@@ -585,7 +642,7 @@
"name": "Όνομα",
"seconds": "{{count}}δ",
"speakerStats": "Στατιστικά ομιλητή",
"speakerTime": "Ώρα ομιλητή"
"speakerTime": "Χρόνος ομιλητή"
},
"startupoverlay": {
"policyText": " ",
@@ -612,6 +669,7 @@
"help": "Βοήθεια",
"invite": "Πρόσκληση συμμετεχόντων",
"kick": "Αποβολή συμμετέχοντα",
"lobbyButton": "Ενεργοποίηση/απενεργοποίηση λειτουργίας διαδρόμου",
"localRecording": "Εναλλαγή ελέγχων τοπικής καταγραφής",
"lockRoom": "Εναλλαγή κωδικού πρόσβασης συνάντησης",
"moreActions": "Εναλλαγή μενού περισσότερων ενεργειών",
@@ -625,6 +683,7 @@
"raiseHand": "Εναλλαγή σηκώματος χεριού",
"recording": "Εναλλαγή καταγραφής",
"remoteMute": "Σίγαση συμμετέχοντα",
"security": "Επιλογές ασφαλείας",
"Settings": "Εναλλαγή ρυθμίσεων",
"sharedvideo": "Εναλλαγή κοινής χρήσης βίντεο στο Youtube",
"shareRoom": "Προσκαλέστε κάποιον",
@@ -658,6 +717,8 @@
"hangup": "Αποσύνδεση",
"help": "Βοήθεια",
"invite": "Πρόσκληση συμμετεχόντων",
"lobbyButtonDisable": "Απενεργοποίηση λειτουργίας διαδρόμου",
"lobbyButtonEnable": "Ενεργοποίηση λειτουργίας διαδρόμου",
"login": "Είσοδος",
"logout": "Αποσύνδεση",
"lowerYourHand": "Κατεβάστε το χέρι σας",
@@ -678,6 +739,7 @@
"profile": "Επεξεργαστείτε το προφίλ σας",
"raiseHand": "Σηκώστε / κατεβάστε το χέρι σας",
"raiseYourHand": "Σηκώστε το χέρι σας",
"security": "Επιλογές ασφαλείας",
"Settings": "Ρυθμίσεις",
"sharedvideo": "Μοιραστείτε βίντεο στο YouTube",
"shareRoom": "Προσκαλέστε κάποιον",
@@ -743,9 +805,6 @@
"lowDefinition": "Χαμηλής ευκρίνειας",
"onlyAudioAvailable": "Μόνο ο ήχος είναι διαθέσιμος",
"onlyAudioSupported": "Υποστηρίζουμε μόνο ήχο σε αυτό το πρόγραμμα περιήγησης.",
"p2pEnabled": "Λειτουργία Peer to Peer Ενεργοποιημένη",
"p2pVideoQualityDescription": "Σε λειτουργία peer-to-peer, η ποιότητα του εισερχόμενου βίντεο μπορεί μόνο να εναλλάσσεται μεταξύ της υψηλής και μόνο ήχου. Οι υπόλοιπες ρυθμίσεις δεν θα ενεργοποιηθούν μέχρι να τερματιστεί η λειτουργία peer to peer.",
"recHighDefinitionOnly": "Να προτιμηθεί υψηλή ευκρίνεια.",
"sd": "SD",
"sdTooltip": "Προβολή βίντεο τυπικής ανάλυσης",
"standardDefinition": "Τυπική ανάλυση"
@@ -800,32 +859,31 @@
"helpView": {
"header": "Κέντρο βοήθειας"
},
"prejoin": {
"audioAndVideoError": "Σφάλμα ήχου και βίντεο:",
"audioOnlyError": "Σφάλμα ήχου:",
"audioTrackError": "Δεν ήταν δυνατό να δημιουργηθεί το κομμάτι ήχου.",
"callMe": "Κάλεσέ με",
"callMeAtNumber": "Κάλεσε με σε αυτό το νούμερο:",
"configuringDevices": "Διαμόρφωση συσκευών",
"connectedWithAudioQ": "Είστε συνδεδεμένοι με ήχο;",
"copyAndShare": "Αντιγραφή & διαμοιρασμός συνδέσμου συνάντησης",
"dialInMeeting": "Καλέστε στη συνάντηση",
"dialInPin": "Καλέστε στη συνάντηση και εισάγετε κωδικό PIN:",
"dialing": "Γίνεται κλήση",
"doNotShow": "Να μην εμφανιστεί αυτό ξανά",
"iWantToDialIn": "Θέλω να καλέσω",
"joinAudioByPhone": "Σύνδεση με ήχο τηλεφώνου",
"joinMeeting": "Σύνδεση στη συνάντηση",
"joinWithoutAudio": "Σύνδεση χωρίς ήχο",
"initiated": "Η κλήση ξεκίνησε",
"linkCopied": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο",
"lookGood": "Ακούγεται ότι το μικρόφωνό σας δουλεύει σωστά",
"or": ",
"calling": "Γίνεται κλήση...",
"startWithPhone": "Έναρξη με ήχο τηλεφώνου",
"screenSharingError": "Σφάλμα διαμοιρασμού οθόνης:",
"videoOnlyError": "Σφάλμα βίντεο:",
"videoTrackError": "Δεν μπορεί να δημιουργηθεί το βίντεο",
"viewAllNumbers": "προβολή όλων των αριθμών"
"lobby": {
"allow": "Επίτρεψε",
"backToKnockModeButton": "Χωρίς κωδικό, ζητήστε πρόσβαση αντί αυτού",
"dialogTitle": "Λειτουργία διαδρόμου",
"disableDialogContent": "Η λειτουργία διαδρόμου είναι ενεργοποιημένη. Αυτή η λειτουργία εξασφαλιζει ότι οι ανεπιθύμητοι συμμετέχοντες δεν μπορούν να προστεθούν στη συνάντηση. Θέλετε να την απαεργοποιήσετε;",
"disableDialogSubmit": "Απενεργοποίηση",
"emailField": "Εισάγετε τη διεύθυνση email σας",
"enableDialogPasswordField": "Ορισμός κωδικού (προαιρετικός)",
"enableDialogSubmit": "Ενεργοποίηση",
"enableDialogText": "Η ενεργοποίηση λειτουργίας διαδρόμου σας επιτρέπει να προστατεύσετε τη συνάντηση σας, επιτρέποντας την είσοδο μόνο μετά από επίσημη έγκριση από έναν διαχειριστή.",
"enterPasswordButton": "Εισαγωγή κωδικού συνάντησής",
"enterPasswordTitle": "Εισάγετε κωδικό για να προστεθείτε στη συνομιλία",
"invalidPassword": "Εσφαλμένος κωδικός",
"joiningMessage": "Θα προστεθείτε στη συνάντηση μόλις κάποιος αποδεχτεί το αίτημά σας",
"joinWithPasswordMessage": "Γίνεται προσπάθεια εισόδου με κωδικό, παρακαλώ περιμένετε...",
"joinRejectedMessage": "Το αίτημα εισόδου σας απορρίφθηκε από έναν διαχειριστή.",
"joinTitle": "Προσθήκη σε συνάντηση",
"joiningTitle": "Γίνεται αίτηση εισόδου σε συνάντηση...",
"joiningWithPasswordTitle": "Γίνεται είσοδος με κωδικό...",
"knockButton": "Αίτημα εισόδου",
"knockTitle": "Κάποιος θέλει να προστεθεί στη συνάντηση",
"nameField": "Εισάγετε το όνομά σας",
"passwordField": "Εισάγετε τον κωδικό συνάντησης",
"passwordJoinButton": "Είσοδος",
"reject": "Απόρριψη",
"toggleLabel": "Ενεργοποίηση διαδρόμου"
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -195,10 +195,8 @@
"dismiss": "Descartar",
"displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
"done": "Listo",
"e2eeDescription": "<p>El cifrado Extremo-a-Extremo es actualmente <strong>EXPERIMENTAL</strong>. Por favor lea<a href='https://jitsi.org/blog/e2ee/' target='_blank'>este artículo</a> para más detalles.</p><br/><p>Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.</p>",
"e2eeLabel": "Clave",
"e2eeTitle": "Cifrado Extremo-a-Extremo",
"e2eeWarning": "<br /><p><strong>ATENCION:</strong> No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.</p>",
"e2eeDescription": "El cifrado Extremo-a-Extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.",
"e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
"enterDisplayName": "Por favor ingresa tu nombre aquí",
"error": "Error",
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir escritorio.",
@@ -582,7 +580,7 @@
},
"security": {
"about": "Usted puede agregar una contraseña a la reunión. Los participantes necesitaran la contraseña para unirse a la reunión.",
"insecureRoomNameWarning": "El nombre de la sala es inseguro. Participantes no desseados pueden llegar a unirse a la reunión.",
"insecureRoomNameWarning": "El nombre de la sala es inseguro. Participantes no deseados pueden llegar a unirse a la reunión.",
"securityOptions": "Opciones de seguridad"
},
"settings": {

View File

@@ -194,10 +194,8 @@
"dismiss": "Descartar",
"displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
"done": "Listo",
"e2eeDescription": "<p>El cifrado Extremo-a-Extremo es actualmente <strong>EXPERIMENTAL</strong>. Por favor lea<a href='https://jitsi.org/blog/e2ee/' target='_blank'>este artículo</a> para más detalles.</p><br/><p>Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.</p>",
"e2eeLabel": "Clave",
"e2eeTitle": "Cifrado Extremo-a-Exremo",
"e2eeWarning": "<br /><p><strong>ATENCION:</strong> No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.</p>",
"e2eeDescription": "El cifrado Extremo-a-Extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.",
"e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
"enterDisplayName": "Por favor ingresa tu nombre aquí",
"error": "Error",
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir escritorio.",
@@ -580,7 +578,7 @@
},
"security": {
"about": "Usted puede agregar una contraseña a la reunión. Los participantes necesitaran la contraseña para unirse a la reunión.",
"insecureRoomNameWarning": "El nombre de la sala es inseguro. Participantes no desseados pueden llegar a unirse a la reunión.",
"insecureRoomNameWarning": "El nombre de la sala es inseguro. Participantes no deseados pueden llegar a unirse a la reunión.",
"securityOptions": "Opciones de seguridad"
},
"settings": {

View File

@@ -175,9 +175,6 @@
"dismiss": "Baztertu",
"displayNameRequired": "Kaixo! Zein da zure izena?",
"done": "Eginda",
"e2eeDescription": "",
"e2eeLabel": "",
"e2eeTitle": "",
"e2eeWarning": "",
"enterDisplayName": "Sartu zure izena hemen",
"error": "Errorea",

View File

@@ -1,21 +1,36 @@
{
"addPeople": {
"add": "Inviter",
"addContacts": "Inviter vos contacts",
"copyInvite": "Copier l'invitation à la réunion",
"copyLink": "Copier le lien de la réunion",
"copyStream": "Copier le lien de diffision en direct",
"countryNotSupported": "Cette destination n'est pas actuellement supportée.",
"countryReminder": "Appel hors des États-Unis ? Veuillez débuter par le code du pays !",
"defaultEmail": "Votre email par défaut",
"disabled": "Vous ne pouvez pas inviter quelqu'un.",
"failedToAdd": "Erreur lors de l'ajout des participants",
"footerText": "Appels sortants désactivés.",
"googleEmail": "Gmail",
"inviteMoreHeader": "Vous êtes seul(e) dans la réunion",
"inviteMoreMailSubject": "Rejoindre une réunion {{appName}}",
"inviteMorePrompt": "Inviter d'autres personnes",
"linkCopied": "Lien copié dans le presse-papiers",
"loading": "Rechercher des personnes et des numéros de téléphone",
"loadingNumber": "Validation du numéro de téléphone",
"loadingPeople": "Recherche de personnes à inviter",
"noResults": "Aucun résultat de recherche correspondant",
"noValidNumbers": "Veuillez entrer un numéro de téléphone",
"outlookEmail": "Outlook",
"searchNumbers": "Ajouter des numéros de téléphone",
"searchPeople": "Rechercher une personne",
"searchPeopleAndNumbers": "Rechercher des personnes ou ajouter leurs numéros de téléphone",
"shareInvite": "Partager l'invitation à la réunion",
"shareLink": "Partager le lien de la réunion pour inviter d'autres personnes",
"shareStream": "Partager le lien de diffusion en direct",
"telephone": "Téléphone : {{number}}",
"title": "Inviter une personne à cette réunion"
"title": "Inviter une personne à cette réunion",
"yahooEmail": "Yahoo"
},
"audioDevices": {
"bluetooth": "Bluetooth",
@@ -81,7 +96,7 @@
"FETCH_SESSION_ID": "Obtention dun identifiant de session…",
"GET_SESSION_ID_ERROR": "Obtenir une erreur didentifiant de session : {{code}}",
"GOT_SESSION_ID": "Obtention dun identifiant de session… Terminée",
"LOW_BANDWIDTH": "La vidéo de {{displayName}} a été désactivée pour économiser de la ba de passante"
"LOW_BANDWIDTH": "La vidéo de {{displayName}} a été désactivée pour économiser de la bande passante"
},
"connectionindicator": {
"address": "Adresse :",
@@ -147,6 +162,7 @@
"accessibilityLabel": {
"liveStreaming": "Diffusion en direct"
},
"add": "Ajouter",
"allow": "Autoriser",
"alreadySharedVideoMsg": "Un autre participant est en train de partager sa vidéo. Cette conférence ne permet de partager qu'une seule vidéo à la fois.",
"alreadySharedVideoTitle": "Une seule vidéo partagée est autorisée à la fois",
@@ -174,10 +190,12 @@
"contactSupport": "Contacter le support",
"copy": "Copier",
"dismiss": "Rejeter",
"displayNameRequired": "Salut! Quel est votre nom ?",
"displayNameRequired": "Bonjour! Quel est votre nom ?",
"done": "Terminé",
"enterDisplayName": "Merci de saisir votre nom ici",
"error": "Erreur",
"grantModeratorDialog": "Êtes vous sûr de vouloir rendre ce participant modérateur?",
"grantModeratorTitle": "Nommer modérateur",
"externalInstallationMsg": "Vous devez installer notre extension de partage de bureau.",
"externalInstallationTitle": "Extension requise",
"goToStore": "Aller sur le webstore",
@@ -468,6 +486,40 @@
"passwordSetRemotely": "défini par un autre participant",
"passwordDigitsOnly": "Jusqu'à {{number}} chiffres",
"poweredby": "produit par",
"prejoin": {
"audioAndVideoError": "Erreur audio et video:",
"audioOnlyError": "Erreur audio:",
"audioTrackError": "N'a pas pu créer la piste audio.",
"callMe": "Appelez-moi",
"callMeAtNumber": "Appelez-moi à ce numéro:",
"configuringDevices": "Configuration des appareils...",
"connectedWithAudioQ": "Êtes-vous connecté avec le microphone?",
"copyAndShare": "Copier & partager le lien",
"dialInMeeting": "Participez à la réunion",
"dialInPin": "Participez à la réunion et saisir le code PIN:",
"dialing": "Numérotation",
"doNotShow": "Ne plus afficher ceci",
"errorDialOut": "Impossible de composer le numéro",
"errorDialOutDisconnected": "Impossible de composer le numéro. Déconnecté",
"errorDialOutFailed": "Impossible de composer le numéro. L'appel a échoué",
"errorDialOutStatus": "Erreur lors de l'obtention de l'état d'appel sortant",
"errorStatusCode": "Erreur de numérotation, code d'état: {{status}}",
"errorValidation": "La validation du numéro a échoué",
"iWantToDialIn": "Je veux me connecter",
"joinAudioByPhone": "Rejoindre avec l'audio du téléphone",
"joinMeeting": "Rejoindre la réunion",
"joinWithoutAudio": "Rejoignez sans microphone",
"initiated": "Appel lancé",
"linkCopied": "Lien copié dans le presse-papiers",
"lookGood": "Il semble que votre microphone fonctionne correctement",
"or": "ou",
"calling": "Appel",
"startWithPhone": "Commencez avec l'audio du téléphone",
"screenSharingError": "Erreur de partage d'écran:",
"videoOnlyError": "Erreur vidéo:",
"videoTrackError": "Impossible de créer une piste vidéo.",
"viewAllNumbers": "voir tous les numéros"
},
"presenceStatus": {
"busy": "Occupé",
"calling": "Appel...",
@@ -738,6 +790,7 @@
"domute": "Couper le micro",
"domuteOthers": "Couper le micro de tous les autres",
"flip": "Balancer",
"grantModerator": "Nommer modérateur",
"kick": "Exclure",
"moderator": "Modérateur",
"mute": "Un participant a coupé son micro",
@@ -783,5 +836,39 @@
},
"helpView": {
"header": "Centre d'aide"
},
"lobby": {
"knockingParticipantList" : "Liste des participants en attente",
"allow": "Autoriser",
"backToKnockModeButton": "Aucun mot de passe, demander à rejoindre plutôt",
"dialogTitle": "Mode lobby",
"disableDialogContent": "Le mode lobby est actuellement activé. Cette fonctionnalité garantit que les participants indésirables ne peuvent pas rejoindre votre réunion. Souhaitez-vous la désactiver?",
"disableDialogSubmit": "Désactiver",
"emailField": "Saisissez votre adresse email",
"enableDialogPasswordField": "Définir le mot de passe (optionel)",
"enableDialogSubmit": "Activer",
"enableDialogText": "Le mode lobby vous permet de protéger votre réunion en autorisant les personnes à entrer qu'après l'approbation formelle d'un modérateur.",
"enterPasswordButton": "Saisissez un mot de passe de réunion",
"enterPasswordTitle": "Saisissez le mot de passe pour rejoindre la réunion",
"invalidPassword": "Mot de passe invalide",
"joiningMessage": "Vous allez rejoindre une réunion dès que quelqu'un aura accepté votre demande",
"joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait...",
"joinRejectedMessage": "Votre requête pour rejoindre une réunion a été refusée par un modérateur.",
"joinTitle": "Rejoindre une réunion",
"joiningTitle": "Demander à rejoindre une réunion...",
"joiningWithPasswordTitle": "Rejoindre avec mot de passe...",
"knockButton": "Demander à rejoindre",
"knockTitle": "Quelqu'un souhaite rejoindre la réunion",
"nameField": "Saisissez votre nom",
"passwordField": "Saisissez le mot de passe de la réunion",
"passwordJoinButton": "Rejoindre",
"reject": "Refuser",
"toggleLabel": "Activer le lobby"
},
"security": {
"about": "Vous pouvez ajouter un mot de passe à votre réunion. Les participants devront fournir le mot de passe avant qu'ils soient autorisés à rejoindre la réunion.",
"aboutReadOnly": "Les modérateurs peuvent ajouter un mot de passe à la réunion. Les participants devront fournir le mot de passe avant qu'ils soient autorisés à rejoindre la réunion.",
"insecureRoomNameWarning": "Le nom de la salle est peu sûr. Des participants non désirés peuvent rejoindre votre réunion. Pensez à sécuriser votre réunion en cliquant sur le bouton de sécurité.",
"securityOptions": "Options de sécurité"
}
}

View File

@@ -290,9 +290,9 @@
"inviteLiveStream": "この会議のライブストリームを表示するには、このリンクをクリックしてください:{{url}}",
"invitePhone": "",
"invitePhoneAlternatives": "",
"inviteURLFirstPartGeneral": "",
"inviteURLFirstPartPersonal": "",
"inviteURLSecondPart": "",
"inviteURLFirstPartGeneral": "あなたはミーティングに招待されました。",
"inviteURLFirstPartPersonal": "{{name}} があなたをミーティングに招待しました。\n",
"inviteURLSecondPart": "\nミーティングにご参加ください:\n{{url}}\n",
"liveStreamURL": "ライブストリーム:",
"moreNumbers": "その他の番号",
"noNumbers": "ダイヤルイン番号はありません。",
@@ -325,7 +325,7 @@
"keyboardShortcuts": "キーボードショートカット",
"localRecording": "ローカル録画コントロールの表示/非表示",
"mute": "マイクの消音 ( ミュート )",
"pushToTalk": "話すために押す",
"pushToTalk": "プッシュ・トゥ・トーク",
"raiseHand": "手を上げる/下げる",
"showSpeakerStats": "演説者のデータを表示",
"toggleChat": "チャットを表示/非表示",
@@ -566,7 +566,7 @@
"shortcuts": "ショートカットに切り替える",
"show": "",
"speakerStats": "スピーカー統計に切り替える",
"tileView": "",
"tileView": "タイルビュー",
"toggleCamera": "カメラを切り替える",
"videomute": "ミュートビデオに切り替える",
"videoblur": ""
@@ -582,9 +582,9 @@
"documentClose": "共有ドキュメントを閉じる",
"documentOpen": "共有ドキュメントを開く",
"enterFullScreen": "フルスクリーン表示",
"enterTileView": "タイルビューを開始",
"enterTileView": "タイルビューを開始",
"exitFullScreen": "フルスクリーンを終了",
"exitTileView": "タイルビューを終了",
"exitTileView": "タイルビューを終了",
"feedback": "フィードバックを残す",
"hangup": "退出",
"invite": "メンバーを招待する",
@@ -609,7 +609,7 @@
"stopSubtitles": "字幕停止",
"stopSharedVideo": "YouTube動画を停止する",
"talkWhileMutedPopup": "話そうとしていますか? あなたはミュートされています。",
"tileViewToggle": "",
"tileViewToggle": "タイルビューを切り替え",
"toggleCamera": "カメラを切り替える",
"videomute": "カメラの開始 / 停止",
"startvideoblur": "",

View File

@@ -1,15 +1,15 @@
{
"addPeople": {
"add": "",
"add": "Nced…",
"countryNotSupported": "",
"countryReminder": "",
"disabled": "",
"disabled": "insa",
"failedToAdd": "",
"footerText": "",
"loading": "",
"footerText": "aḍris n uḍar",
"loading": "tulya",
"loadingNumber": "",
"loadingPeople": "",
"noResults": "",
"noResults": "ulac agemmuḍ",
"noValidNumbers": "",
"searchNumbers": "",
"searchPeople": "",
@@ -19,7 +19,7 @@
},
"audioDevices": {
"bluetooth": "Bluetooth",
"headphones": "",
"headphones": "Aṣawaḍ uqeṛṛu",
"phone": "Tiliɣri",
"speaker": "Asawaḍ"
},
@@ -34,7 +34,7 @@
"generic": "",
"notSignedIn": ""
},
"join": "",
"join": "Semlil",
"joinTooltip": "",
"nextMeeting": "",
"noEvents": "",
@@ -42,7 +42,7 @@
"permissionButton": "",
"permissionMessage": "",
"refresh": "",
"today": ""
"today": "Ass-a"
},
"chat": {
"error": "",
@@ -51,7 +51,7 @@
"popover": "Fren meffer isem",
"title": ""
},
"title": ""
"title": "Asqerdec"
},
"connectingOverlay": {
"joiningRoom": ""
@@ -62,16 +62,16 @@
"AUTHFAIL": "",
"CONNECTED": "Yeqqen",
"CONNECTING": "Tuqqna",
"CONNFAIL": "",
"DISCONNECTED": "Yeffeɣ",
"DISCONNECTING": "Yeffeɣ",
"ERROR": "",
"RECONNECTING": ""
"CONNFAIL": "La connexion a échoué",
"DISCONNECTED": "Ur yeqqin ara",
"DISCONNECTING": "Tufɣa",
"ERROR": "Tuccḍa",
"RECONNECTING": "Tulsa n tuqqna"
},
"connectionindicator": {
"address": "Tansa:",
"bandwidth": "",
"bitrate": "",
"bitrate": "Aktum imisin",
"bridgeCount": "",
"connectedTo": "",
"framerate": "",
@@ -83,7 +83,7 @@
"more": "Sken-d ugar",
"packetloss": "",
"quality": {
"good": "Yelha",
"good": "Telha",
"inactive": "D arurmid",
"lost": "Yexser",
"nonoptimal": "",
@@ -94,21 +94,21 @@
"remoteport_plural": "",
"remoteport": "",
"resolution": "",
"status": "Tuqqna",
"status": "Tuqqna:",
"transport_plural": "Tumnayt:",
"transport": "Tumnayin:",
"turn": ""
},
"dateUtils": {
"earlier": "",
"today": "",
"yesterday": ""
"today": "Ass-a",
"yesterday": "Iḍelli"
},
"deepLinking": {
"appNotInstalled": "",
"description": "",
"descriptionWithoutWeb": "",
"downloadApp": "Zdem asnas",
"downloadApp": "Sider-d asnas",
"launchWebButton": "",
"openApp": "",
"title": "",
@@ -116,9 +116,9 @@
},
"defaultLink": "md. {{url}}",
"deviceError": {
"cameraError": "Ugur deg unekcum i tkamirat-inek",
"cameraError": "Ugur deg unekcum ɣer tkamirat-inek",
"cameraPermission": "Ugur deg usɛay n tsiregt n tkamirat",
"microphoneError": "Ugur deg unekcum i usawaḍ-inek",
"microphoneError": "Ugur deg unekcum ɣer usawaḍ-inek",
"microphonePermission": "Ugur deg usɛay n tsiregt n usawaḍ"
},
"deviceSelection": {
@@ -135,33 +135,33 @@
"alreadySharedVideoMsg": "",
"alreadySharedVideoTitle": "",
"applicationWindow": "",
"Back": "",
"Back": "Retour",
"cameraConstraintFailedError": "",
"cameraNotFoundError": "Ur tettwawef ara tkamirat.",
"cameraNotFoundError": "Ur nufi ara takamirat.",
"cameraNotSendingData": "",
"cameraNotSendingDataTitle": "",
"cameraPermissionDeniedError": "",
"cameraUnknownError": "",
"cameraUnsupportedResolutionError": "",
"Cancel": "Semmet",
"close": "",
"Cancel": "Sefsex",
"close": "Mdel",
"conferenceDisconnectMsg": "",
"conferenceDisconnectTitle": "",
"conferenceDisconnectTitle": "Suffren-k.",
"conferenceReloadMsg": "",
"conferenceReloadTitle": "",
"confirm": "",
"confirmNo": "",
"confirmYes": "",
"confirm": "Sentem",
"confirmNo": "Uhu",
"confirmYes": "Ih",
"connectError": "",
"connectErrorWithMsg": "",
"connecting": "Tuqqna",
"connecting": "Yetteqqen",
"contactSupport": "Anermis n tallelt",
"copy": "Nɣel",
"dismiss": "",
"dismiss": "Agwi",
"displayNameRequired": "",
"done": "Ula d yiwen ",
"enterDisplayName": "",
"error": "",
"error": "Tuccḍa",
"externalInstallationMsg": "",
"externalInstallationTitle": "",
"goToStore": "",
@@ -172,7 +172,7 @@
"inlineInstallationMsg": "",
"inlineInstallExtension": "Sbedd tura",
"internalError": "",
"internalErrorTitle": "",
"internalErrorTitle": "Agul zdaxel",
"kickMessage": "",
"kickParticipantButton": "",
"kickParticipantDialog": "",
@@ -185,7 +185,7 @@
"lockRoom": "",
"lockTitle": "",
"logoutQuestion": "",
"logoutTitle": "",
"logoutTitle": "Tufɣa",
"maxUsersLimitReached": "",
"maxUsersLimitReachedTitle": "",
"micConstraintFailedError": "",
@@ -198,14 +198,14 @@
"muteParticipantButton": "Kkes imesli",
"muteParticipantDialog": "",
"muteParticipantTitle": "",
"Ok": "",
"Ok": "IH",
"passwordLabel": "",
"passwordNotSupported": "",
"passwordNotSupportedTitle": "",
"passwordRequired": "",
"popupError": "",
"popupErrorTitle": "",
"recording": "",
"recording": "Asekles",
"recordingDisabledForGuestTooltip": "",
"recordingDisabledTooltip": "",
"rejoinNow": "",
@@ -222,7 +222,7 @@
"removeSharedVideoTitle": "",
"reservationError": "",
"reservationErrorMsg": "",
"retry": "",
"retry": "Ɛreḍ tikkelt nniḍen",
"screenSharingFailedToInstall": "",
"screenSharingFailedToInstallTitle": "",
"screenSharingFirefoxPermissionDeniedError": "",
@@ -230,7 +230,7 @@
"screenSharingPermissionDeniedError": "",
"serviceUnavailable": "",
"sessTerminated": "",
"Share": "",
"Share": "Bḍu",
"shareVideoLinkError": "",
"shareVideoTitle": "Bḍu tavidyut",
"shareYourScreen": "Bḍut agdil-nwen",
@@ -244,8 +244,8 @@
"stopRecordingWarning": "",
"stopStreamingWarning": "",
"streamKey": "",
"Submit": "",
"thankYou": "",
"Submit": "Azen",
"thankYou": "tanemmirt",
"token": "",
"tokenAuthFailed": "",
"tokenAuthFailedTitle": "",
@@ -255,8 +255,10 @@
"WaitForHostMsg": "",
"WaitForHostMsgWOk": "",
"WaitingForHost": "",
"Yes": "",
"yourEntireScreen": ""
"Yes": "Ih",
"yourEntireScreen": "",
"add": "Rnu",
"e2eeLabel": "Tasarut"
},
"dialOut": {
"statusMessage": ""
@@ -271,18 +273,18 @@
"veryGood": "Yelha maḍi"
},
"incomingCall": {
"answer": "",
"answer": "Tiririt",
"audioCallTitle": "",
"decline": "",
"decline": "Agwi",
"productLabel": "",
"videoCallTitle": ""
},
"info": {
"accessibilityLabel": "",
"accessibilityLabel": "Sken talɣut",
"addPassword": "",
"cancelPassword": "",
"conferenceURL": "",
"country": "",
"conferenceURL": "Aseγwen:",
"country": "Tamurt",
"dialANumber": "",
"dialInConferenceID": "",
"dialInNotSupported": "",
@@ -303,36 +305,36 @@
"noRoom": "",
"numbers": "",
"password": "",
"title": "",
"title": "Bḍu",
"tooltip": "",
"label": ""
},
"inviteDialog": {
"alertText": "",
"header": "",
"header": "Nced…",
"searchCallOnlyPlaceholder": "",
"searchPeopleOnlyPlaceholder": "",
"searchPlaceholder": "",
"send": ""
"send": "Azen"
},
"inlineDialogFailure": {
"msg": "Yewwet-aɣ-tt wugur ciṭṭuḥ",
"retry": "Ɛreḍ daɣen",
"msg": "Yewwet-aɣ-tt ciṭṭuḥ wugur.",
"retry": "Ɛreḍ tikkelt nniḍen",
"support": "Tallalt",
"supportMsg": ""
},
"keyboardShortcuts": {
"focusLocal": "Asersi n tavidiyut innu",
"focusRemote": "Asersi n tivdyutin n wiyaḍ",
"fullScreen": "Rmed neɣ kkes agdil aččuran",
"fullScreen": "Rmed neɣ ffeɣ seg ugdil aččuran",
"keyboardShortcuts": "Inegzumen n unasiw ",
"localRecording": "Sken neɣ ffer isenqaden idiganen n usekles",
"mute": "Rmed neɣ sens asawaḍ",
"pushToTalk": "Sit akken ad temmeslayeḍ",
"raiseHand": "sali neɣ ṣub afus-ik",
"raiseHand": "Sali neɣ ṣub afus-ik",
"showSpeakerStats": "Sken addaden n umendid",
"toggleChat": "Ldi neɣ mdel agalis n usqardec",
"toggleFilmstrip": "Sken neɣ ffer tinfulin n tvidyut",
"toggleFilmstrip": "Sken neɣ ffer tinfulin n tvidyutin",
"toggleScreensharing": "Uɣal gar tkamiṛat d beṭṭu n ugdil",
"toggleShortcuts": "Sken neɣ ffer inegzumen n unasiw",
"videoMute": "Sekker neɣ ḥbes takamiṛat innek"
@@ -341,10 +343,10 @@
"busy": "",
"busyTitle": "",
"changeSignIn": "",
"choose": "",
"choose": "fren",
"chooseCTA": "",
"enterStreamKey": "",
"error": "",
"error": "tuccḍa",
"errorAPI": "",
"errorLiveStreamNotEnabled": "",
"expandedOff": "",
@@ -353,28 +355,28 @@
"failedToStart": "Ur yesmurres wusrid deg uqlaɛ",
"getStreamKeyManually": "",
"invalidStreamKey": "",
"off": "",
"on": "",
"off": "sens",
"on": "rmed",
"pending": "",
"serviceName": "",
"signedInAs": "",
"signIn": "",
"signedInAs": "iqqen am",
"signIn": "Qqen s Google",
"signInCTA": "",
"signOut": "",
"signOut": "Ffeɣ",
"start": "",
"streamIdHelp": "",
"streamIdHelp": "D acu wa?",
"unavailableTitle": ""
},
"localRecording": {
"clientState": {
"off": "",
"on": "",
"unknown": ""
"off": "insa",
"on": "irmed",
"unknown": "D arussin"
},
"dialogTitle": "",
"duration": "",
"durationNA": "",
"encoding": "",
"duration": "Tanzagt",
"durationNA": "N/A",
"encoding": "Encodage",
"label": "",
"labelToolTip": "",
"localRecording": "",
@@ -385,17 +387,17 @@
"finishedModerator": "",
"notModerator": ""
},
"moderator": "",
"no": "",
"moderator": "Aseɣyad",
"no": "uhu",
"participant": "",
"participantStats": "",
"sessionToken": "",
"start": "",
"stop": "",
"yes": ""
"yes": "Ih"
},
"lockRoomPassword": "",
"lockRoomPasswordUppercase": "",
"lockRoomPassword": "awal uffir",
"lockRoomPasswordUppercase": "Mot de passe",
"me": "nek",
"notify": {
"connectedOneMember": "",
@@ -411,7 +413,7 @@
"kickParticipant": "",
"me": "Nekk",
"moderator": "",
"muted": "Tebdam asqerdec deg tsusmi.",
"muted": "Tebdiḍ asqerdec s tsusmi.",
"mutedTitle": "",
"mutedRemotelyTitle": "",
"mutedRemotelyDescription": "",
@@ -423,32 +425,32 @@
"startSilentDescription": "",
"suboptimalExperienceDescription": "",
"suboptimalExperienceTitle": "",
"unmute": "",
"unmute": "Susem",
"newDeviceCameraTitle": "",
"newDeviceAudioTitle": "",
"newDeviceAction": ""
"newDeviceAction": "Seqdec"
},
"passwordSetRemotely": "Yettwaɛeyyen sɣur yimekki nniḍen",
"passwordDigitsOnly": "",
"poweredby": "Yemmug-d sɣur",
"poweredby": "yemmug-d sɣur",
"presenceStatus": {
"busy": "",
"calling": "",
"connected": "Yeqqen",
"connecting": "Tuqqna",
"connecting2": "Tuqqna",
"connecting": "Yetteqqen…",
"connecting2": "Yetteqqen*…",
"disconnected": "Yeffeɣ",
"expired": "",
"ignored": "",
"expired": "Yemmut",
"ignored": "Ignoré",
"initializingCall": "",
"invited": "",
"rejected": "",
"rejected": "Yerrad",
"ringing": ""
},
"profile": {
"setDisplayNameLabel": "Fernet azun",
"setEmailInput": "Sekcem amayel",
"setEmailLabel": "Fernet amayel-nwen Gravatar",
"setDisplayNameLabel": "Fren azun",
"setEmailInput": "Sekcem-d imayl",
"setEmailLabel": "Fren imayl-inek n Gravatar",
"title": "Amaɣnu"
},
"recording": {
@@ -466,13 +468,13 @@
"live": "",
"loggedIn": "",
"off": "",
"on": "",
"on": "Asekles",
"pending": "",
"rec": "",
"serviceDescription": "",
"serviceName": "",
"signIn": "",
"signOut": "",
"signIn": "Qqen",
"signOut": "Ffeɣ",
"unavailable": "",
"unavailableTitle": ""
},
@@ -485,15 +487,15 @@
"disconnect": "Yeffeɣ",
"microsoftSignIn": "",
"signedIn": "",
"title": ""
"title": "Awitay"
},
"devices": "",
"followMe": "Yal amdan iy-ṭararen",
"language": "",
"devices": "Périphériques",
"followMe": "Yal amdan iy-ṭṭafaren",
"language": "Langue ",
"loggedIn": "",
"moderator": "",
"more": "",
"name": "",
"moderator": "Aseɣyad",
"more": "Ugar",
"name": "ISem",
"noDevice": "Ula d yiwen ",
"selectAudioOutput": "",
"selectCamera": "Takamiṛatt",
@@ -503,19 +505,21 @@
"title": "Iɣewwaren"
},
"settingsView": {
"alertOk": "",
"alertTitle": "",
"alertOk": "IH",
"alertTitle": "Asmigel",
"alertURLText": "",
"buildInfoSection": "",
"conferenceSection": "",
"displayName": "",
"email": "",
"displayName": "Isem n uskan",
"email": "Imayl",
"header": "Iɣewwaren",
"profileSection": "Amaɣnu",
"serverURL": "",
"serverURL": "URL n uqeddac",
"startWithAudioMuted": "",
"startWithVideoMuted": "",
"version": ""
"version": "Version",
"alertCancel": "Semmet",
"advanced": "Talqayt"
},
"share": {
"dialInfoText": "",
@@ -523,20 +527,20 @@
},
"speaker": "Asawaḍ",
"speakerStats": {
"hours": "",
"minutes": "",
"name": "",
"seconds": "",
"hours": "isragen",
"minutes": "tisedatin",
"name": "Isem",
"seconds": "tisnatin",
"speakerStats": "",
"speakerTime": ""
},
"startupoverlay": {
"policyText": "",
"policyText": " ",
"title": "{{app}} yesra ad yesseqdec asawaḍ d tkamirat-inek."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Kcem",
"text": "Sit deg <i>Kcem</i> d taqeffalt ad teqqneḍ.",
"text": "Sit deg taqeffalt <i>Kcem</i> akken ad teqqneḍ.",
"title": "Asarag-inek s uvidyu yettwaseḥbes acku aselkim-agi igen."
},
"toolbar": {
@@ -544,8 +548,8 @@
"audioOnly": "Rmed/Sens imesli kan",
"audioRoute": "",
"callQuality": "",
"cc": "",
"chat": "Eg-d asfaylu n udiwenni",
"cc": "Commuter les sous-titres",
"chat": "Ffer/Sken-d asfaylu n udiwenni",
"document": "Ldi / Mdel zzmam yettwabḍan",
"feedback": "",
"fullScreen": "",
@@ -572,9 +576,11 @@
"tileView": "",
"toggleCamera": "",
"videomute": "",
"videoblur": ""
"videoblur": "",
"privateMessage": "Azen izen uslig",
"help": "Tallelt"
},
"addPeople": "Rnut-d imdanen i tiɣri-nwen",
"addPeople": "Rnu-d imdanen ɣer tiɣri-inek",
"audioOnlyOff": "",
"audioOnlyOn": "",
"audioRoute": "",
@@ -589,17 +595,17 @@
"exitFullScreen": "",
"exitTileView": "",
"feedback": "",
"hangup": "Eǧǧ",
"hangup": "Ffeɣ",
"invite": "",
"login": "Kcem",
"logout": "",
"login": "Qqen",
"logout": "Tufɣa",
"lowerYourHand": "",
"moreActions": "",
"mute": "D asusam / D arasusam",
"moreActions": "Ugar n tigawin",
"mute": "Sgugem / Kkes tigugmi",
"openChat": "",
"pip": "",
"profile": "Ẓreg amaɣnu-ik ",
"raiseHand": "sali neɣub afus-ik",
"raiseHand": "Sali / Ṣub afus-ik",
"raiseYourHand": "",
"Settings": "Iɣewwaren",
"sharedvideo": "Bḍu tavidyut n Youtube",
@@ -616,7 +622,10 @@
"toggleCamera": "",
"videomute": "Seqleɛ / Seḥbes takamirat",
"startvideoblur": "",
"stopvideoblur": ""
"stopvideoblur": "",
"privateMessage": "Azen izen uslig",
"moreOptions": "Ugar n textirin",
"help": "Tallelt"
},
"transcribing": {
"ccButtonTooltip": "",
@@ -631,16 +640,16 @@
"tr": ""
},
"userMedia": {
"androidGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
"chromeGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
"edgeGrantPermissions": "Fren <b><i>OK</i></b> mara d-yessuter yiminig tisurag.",
"androidGrantPermissions": "Fren <b><i>Sireg</i></b> mara d-yessuter yiminig-ik tisurag.",
"chromeGrantPermissions": "Fren <b><i>Sireg</i></b> mara d-yessuter yiminig-ik tisurag.",
"edgeGrantPermissions": "Fren <b><i>Ih</i></b> mara d-yessuter yiminig tisurag.",
"electronGrantPermissions": "Ttxil-k efk-d tasiregt n beṭṭu n tkamiṛat d umikṛufun-ik",
"firefoxGrantPermissions": "Fren <b><i>Bḍu abenk yettwafernen</i></b> mara d-yessuter yiminig-ik tisurag.",
"iexplorerGrantPermissions": "Fren <b><i>OK</i></b> mara d-yessuter yiminig tisurag.",
"iexplorerGrantPermissions": "Fren <b><i>Ih</i></b> mara d-yessuter yiminig tisurag.",
"nwjsGrantPermissions": "Ttxil-k efk-d tasiregt n beṭṭu n tkamiṛat d umikṛufun-ik",
"operaGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
"react-nativeGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
"safariGrantPermissions": "Fren <b><i>OK</i></b> mara d-yessuter yiminig tisurag."
"react-nativeGrantPermissions": "Fren <b><i>Sireg</i></b> mara d-yessuter yiminig-ik tisurag.",
"safariGrantPermissions": "Fren <b><i>Ih</i></b> mara d-yessuter yiminig tisurag."
},
"videoSIPGW": {
"busy": "",
@@ -669,11 +678,11 @@
},
"videothumbnail": {
"domute": "Kkes imesli",
"flip": "",
"flip": "Tuttya",
"kick": "",
"moderator": "",
"moderator": "Aseɣyad",
"mute": "",
"muted": "Kkes imesli",
"muted": "Tettwasgugem",
"remoteControl": "Asenqed agemmaḍ",
"show": "",
"videomute": ""
@@ -681,29 +690,35 @@
"welcomepage": {
"accessibilityLabel": {
"join": "Sit iwakken ad tedduḍ",
"roomname": "Aru isem n tzeqqa"
"roomname": "Sekcem-d isem n tzeqqa"
},
"appDescription": "",
"audioVideoSwitch": {
"audio": "Taɣect",
"video": "Tavidyut"
},
"calendar": "",
"calendar": "Awitay",
"connectCalendarButton": "Qqen awitay-inek",
"connectCalendarText": "",
"enterRoomTitle": "",
"go": "DDU",
"join": "KCEM",
"info": "",
"join": "SNULFU-D / KCEM",
"info": "Talɣut",
"privacy": "Tabaḍnit",
"recentList": "",
"recentListDelete": "",
"recentList": "Melmi kan",
"recentListDelete": "Kkes",
"recentListEmpty": "",
"reducedUIText": "",
"roomname": "Aru isem n tzeqqa",
"roomname": "Sekcem-d isem n tzeqqa",
"roomnameHint": "Sekcem isem neɣ URL n texxamt wuɣur tebɣiḍ ad tedduḍ. Tzemreḍ ad tgeḍ isem, eǧǧ kan imdanen ara temlileḍ ad t-isinen iwakken ad skecmen yiwen n yisem.",
"sendFeedback": "Azen rray-ik",
"terms": "Tiwtilin",
"title": ""
"title": "",
"goSmall": "Ddu",
"getHelp": "Awi tallelt"
},
"prejoin": {
"or": "neɣ",
"doNotShow": "Ur d-skan ara tikkelt-nniḍen"
}
}

View File

@@ -175,10 +175,8 @@
"dismiss": "Dismiss",
"displayNameRequired": "हाय! तुझे नाव काय आहे?",
"done": "पूर्ण झाले",
"e2eeDescription": "<p>एंड-टू-एंड एनक्रिप्शन सध्या आहे <strong>प्रायोगिक</strong>. कृपया पहा <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a>तपशीलांसाठी.</p><br/><p>कृपया लक्षात ठेवा की एंड-टू-एंड एन्क्रिप्शन चालू केल्याने सर्व्हर-साइड प्रदान सेवा प्रभावीपणे अक्षम होईल: रेकॉर्डिंग, थेट प्रवाह आणि फोन सहभाग. हे देखील लक्षात ठेवा की मीटिंग केवळ समाविष्ट करण्यायोग्य प्रवाहांसाठी समर्थन असलेल्या ब्राउझरमधून सामील झालेल्या लोकांसाठीच कार्य करेल.</p>",
"e2eeLabel": "Key",
"e2eeTitle": "एंड-टू-एंड एनक्रिप्शन",
"e2eeWarning": "<br /><p><strong>चेतावणी:</strong>या बैठकीतील सर्व सहभागींना एंड-टू-एंड एनक्रिप्शनसाठी समर्थन असल्याचे दिसत नाही. आपण सक्षम केल्यास ते आपल्याला पाहण्यास किंवा ऐकण्यास सक्षम राहणार नाहीत.</p>",
"e2eeDescription": "एंड-टू-एंड एनक्रिप्शन सध्या आहे प्रायोगिक. कृपया लक्षात ठेवा की एंड-टू-एंड एन्क्रिप्शन चालू केल्याने सर्व्हर-साइड प्रदान सेवा प्रभावीपणे अक्षम होईल: रेकॉर्डिंग, थेट प्रवाह आणि फोन सहभाग. हे देखील लक्षात ठेवा की मीटिंग केवळ समाविष्ट करण्यायोग्य प्रवाहांसाठी समर्थन असलेल्या ब्राउझरमधून सामील झालेल्या लोकांसाठीच कार्य करेल.",
"e2eeWarning": "चेतावणी:या बैठकीतील सर्व सहभागींना एंड-टू-एंड एनक्रिप्शनसाठी समर्थन असल्याचे दिसत नाही. आपण सक्षम केल्यास ते आपल्याला पाहण्यास किंवा ऐकण्यास सक्षम राहणार नाहीत.",
"enterDisplayName": "कृपया आपले नाव येथे प्रविष्ट करा",
"error": "त्रुटी",
"externalInstallationMsg": "आपल्याला आमचा डेस्कटॉप सामायिकरण विस्तार स्थापित करणे आवश्यक आहे.",

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,22 @@
"searchPeople": "Cercar de monde",
"searchPeopleAndNumbers": "Cercar de monde o apondre lor numèros de telefòn",
"telephone": "Telefòn: {{number}}",
"title": "Convidatz de monde a vòstra conferéncia"
"title": "Convidatz de monde a vòstra conferéncia",
"shareStream": "Partejar la ligam de la difusion en dirècte",
"copyStream": "Copiar lo ligam de la difusion en dirècte",
"yahooEmail": "Yahoo Email",
"outlookEmail": "Outlook Email",
"shareLink": "Partejar lo ligam de la conferéncia per convidar de monde",
"shareInvite": "Partejar invitacion conferéncia",
"linkCopied": "Ligam copiat al quichapapièrs",
"inviteMorePrompt": "Convidar mai de monde",
"inviteMoreMailSubject": "Rejónher la conferéncia {{appName}}",
"inviteMoreHeader": "Sètz lunica persona de la conferéncia",
"googleEmail": "Google Email",
"defaultEmail": "Vòstre email per defaut",
"copyLink": "Copiar lo ligam de la conferéncia",
"copyInvite": "Copiar linvitacion a la conferéncia",
"addContacts": "Convidatz vòstres contactes"
},
"audioDevices": {
"bluetooth": "Bluetooth",
@@ -122,7 +137,10 @@
"launchWebButton": "Lançar del navigador",
"openApp": "Telecargar laplicacion",
"title": "Aviada de vòstra conferéncia dins {{app}}…",
"tryAgainButton": "Tornar ensajar del burèu"
"tryAgainButton": "Tornar ensajar del burèu",
"joinInApp": "Rejónher la conferéncia en utilizant laplicacion",
"ifHaveApp": "Savètz ja laplicacion:",
"ifDoNotHaveApp": "Savètz pas encara laplicacion:"
},
"defaultLink": "ex. {{url}}",
"defaultNickname": "ex. Joan Delpuèch",
@@ -238,7 +256,7 @@
"screenSharingFailedToInstallTitle": "Fracàs de l'installacion de partatge d'ecran",
"screenSharingFirefoxPermissionDeniedError": "Quicòm a fach mèuca quand èrem a ensajar de partejar vòstre ecran. Mercés de verificar quavètz donat lautorizacion de lo partejar.",
"screenSharingFirefoxPermissionDeniedTitle": "Ops! Avèm pas pogut aviar lo partatge decran.",
"screenSharingPermissionDeniedError": ups ! Quicòm s'es pas ben passat amb l'autorizacion de vòstra extension de partatge d'ecran. Mercés de recargar e tornar ensajar.",
"screenSharingPermissionDeniedError": "Òps ! Quicòm s'es pas ben passat amb l'autorizacion de vòstra autorizacion de partatge d'ecran. Mercés de recargar e tornar ensajar.",
"sendPrivateMessage": "Avètz recentament recebut un messatge privat. Avètz ensajat di respondre en privat, o volètz enviar lo messatge al grop ?",
"sendPrivateMessageCancel": "Enviar al grop",
"sendPrivateMessageOk": "Enviar en privat",
@@ -257,7 +275,7 @@
"stopLiveStreaming": "Arrestar lo dirècte",
"stopRecording": "Arrestar l'enregistrament",
"stopRecordingWarning": "Sètz segur que volètz arrestar l'enregistrament?",
"stopStreamingWarning": "Sètz segur que volètz arrestar lo dirècte?",
"stopStreamingWarning": "Volètz vertadièrament arrestar lo dirècte?",
"streamKey": "Clau del dirècte",
"Submit": "Validar",
"thankYou": "Mercé d'aver utilizat {{appName}} !",
@@ -273,14 +291,11 @@
"Yes": "Òc",
"yourEntireScreen": "Vòstre ecran complet",
"screenSharingAudio": "Partejar làudio",
"muteEveryoneStartMuted": "",
"muteEveryoneSelf": "",
"muteEveryoneTitle": "",
"muteEveryoneDialog": "",
"muteEveryoneElseTitle": "Copar lo son a totes levat {{whom}}?",
"muteEveryoneElseDialog": "",
"e2eeTitle": "Chiframent del cap a la fin",
"e2eeLabel": "Clau"
"muteEveryoneStartMuted": "D'ara enlà tot lo monde comença mut",
"muteEveryoneSelf": "vos",
"muteEveryoneTitle": "Rendre mut tot lo monde?",
"muteEveryoneDialog": "Volètz vertadièrament copar lo son a tot lo monde? Poiretz pas lo restablir, mas eles poiràn o far quora que vòlgan.",
"muteEveryoneElseTitle": "Copar lo son a totes levat {{whom}}?"
},
"dialOut": {
"statusMessage": "ara es {{status}}"
@@ -383,7 +398,7 @@
"invalidStreamKey": "La clau de difusion en dirècte es benlèu pas corrècta.",
"off": "La difusion en dirècte es estada arrestada",
"offBy": "{{name}} a arrestat la difusion en dirècte",
"on": "La difusion en dirècte es estada arrestada",
"on": "Difusion en dirècte",
"onBy": "{{name}} a començat la difusion en dirècte",
"pending": "Començar lo dirècte…",
"serviceName": "Servici de difusion en dirècte",
@@ -460,7 +475,9 @@
"newDeviceAudioTitle": "Nòu periferic àudio detectat",
"newDeviceAction": "Utilizar",
"oldElectronClientDescription3": " ara!",
"oldElectronClientDescription2": "darrièra compilacion"
"oldElectronClientDescription2": "darrièra compilacion",
"oldElectronClientDescription1": "Sembla quutilizatz una version anciana del client Jitsi Meet ques conegut per conténer de problèmas de seguretat. Mercés de vos assegurar de metre a jorn ",
"OldElectronAPPTitle": "Problèma de seguretat!"
},
"passwordSetRemotely": "causit per qualqu'un mai",
"passwordDigitsOnly": "Fins a {{number}} chifras",
@@ -559,7 +576,9 @@
"startWithAudioMuted": "Començar sens son",
"startWithVideoMuted": "Començar sens vièdo",
"version": "Version",
"alertCancel": "Anullar"
"alertCancel": "Anullar",
"disableCrashReportingWarning": "Volètz vertadièrament desactivar lo rapòrt de plantatge? Lo paramètre serà aplicat aprèp la reaviada de laplicacion.",
"disableCrashReporting": "Desactivar lo rapòrt de plantatge"
},
"share": {
"dialInfoText": "\n\n=====\n\nVolètz sonar de vòstre telefòn estant ?\n\n{{defaultDialInNumber}}Clicatz lo ligam per veire los numèros de telefòn daquesta conferéncia\n{{dialInfoPageUrl}}",
@@ -620,9 +639,10 @@
"toggleCamera": "Passar a la camèra",
"videomute": "Silenciar la vidèo",
"videoblur": "Enfoscar o non la vidèo",
"muteEveryone": "",
"muteEveryone": "Rendre mut tot lo monde",
"moreOptions": "Mostrar mai dopcions",
"e2ee": "Chiframent del cap a la fin"
"e2ee": "Chiframent del cap a la fin",
"security": "Opcions de seguretat"
},
"addPeople": "Ajustar de monde a vòstra sonada",
"audioOnlyOff": "Desactivar lo mòde connexion febla",
@@ -674,12 +694,13 @@
"startvideoblur": "Trebolar mon rèire-plan",
"stopvideoblur": "Desactivar lo borrolatge del rèire-plan",
"noisyAudioInputDesc": "",
"noisyAudioInputTitle": "",
"noisyAudioInputTitle": "Vòstre microfòn sembla brusent !",
"noAudioSignalDialInLinkDesc": "",
"noAudioSignalDialInDesc": "",
"muteEveryone": "",
"muteEveryone": "Rendre mut tot lo monde",
"moreOptions": "Autras opcions",
"e2ee": "Chiframent del cap a la fin"
"e2ee": "Chiframent del cap a la fin",
"security": "Opcions de seguretat"
},
"transcribing": {
"ccButtonTooltip": "Aviar / Arrestat los sostítols",
@@ -743,7 +764,7 @@
"remoteControl": "Contraròtle alonhat",
"show": "Mostrar davant",
"videomute": "Lo participant a arrestat la camèra",
"domuteOthers": ""
"domuteOthers": "Rendre mut totes los autres"
},
"welcomepage": {
"accessibilityLabel": {
@@ -780,8 +801,8 @@
"header": "Centre dajuda"
},
"lonelyMeetingExperience": {
"youAreAlone": "",
"button": ""
"youAreAlone": "Sètz lunica persona de la conferéncia",
"button": "Convidar dautres"
},
"chromeExtensionBanner": {
"dontShowAgain": "Me mostrar pas mai aquò",
@@ -798,6 +819,53 @@
"callMe": "Sona-me",
"audioTrackError": "Creacion impossibla de la pista àudio.",
"audioOnlyError": "Error àudio:",
"audioAndVideoError": "Error àudio e vidèo:"
"audioAndVideoError": "Error àudio e vidèo:",
"dialing": "A sonar",
"viewAllNumbers": "veire totes los numèros",
"videoTrackError": "Creacion duna pista àudio impossibla.",
"videoOnlyError": "Error vidèo:",
"screenSharingError": "Error de partatge decran:",
"startWithPhone": "Començar amb làudio del telefòn",
"calling": "A sonar",
"lookGood": "Sembla que lo microfòn fonciona pas coma cal",
"linkCopied": "Ligam copiat al quichapapièrs",
"initiated": "Sonada aviada",
"joinWithoutAudio": "Rejónher sens àudio",
"joinMeeting": "Rejónher la conferéncia",
"joinAudioByPhone": "Rejónher amb làudio del telefòn"
},
"lobby": {
"reject": "Regetar",
"passwordJoinButton": "Rejónher",
"passwordField": "Picatz lo senhal de la conferéncia",
"nameField": "Escrivètz vòstre nom",
"knockTitle": "Qualquun vòl rejónher la conferéncia",
"knockButton": "Demandar a rejónher",
"joiningWithPasswordTitle": "A rejónher amb senhal...",
"joiningTitle": "Demanda a rejónher la conferéncia...",
"joinTitle": "Rejónher la conferéncia",
"joinRejectedMessage": "Un moderator a regetat vòstra demanda de participacion.",
"joinWithPasswordMessage": "Ensag de participacion amb senhal, volgatz esperar...",
"joiningMessage": "Dintraretz dins la conferéncia tre que qualquun aurà acceptat vòstra demanda",
"invalidPassword": "Senhal invalid",
"enterPasswordTitle": "Dintratz lo senhal per rejónher la conferéncia",
"enterPasswordButton": "Dintratz lo senhal de la conferéncia",
"enableDialogSubmit": "Activar",
"enableDialogPasswordField": "Definir un senhal (opcional)",
"emailField": "Picata vòstra adreça electronica",
"disableDialogSubmit": "Desactivar",
"backToKnockModeButton": "Cap de senhal, demandar a participar a la plaça",
"allow": "Autorizar"
},
"security": {
"securityOptions": "Opcions de seguretat",
"insecureRoomNameWarning": "Lo nom de la sala es pas segur. De monde indesirables poirián rejónher vòstra conferéncia.",
"aboutReadOnly": "Los participants que son moderators pòdon ajustar un $t(lockRoomPassword) a la conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans daver lautorizacion de rejónher la conferéncia.",
"about": "Podètz ajustar un $t(lockRoomPassword) per rejónher una conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans dobténer lautorizacion de dintrar dins la conferéncia."
},
"e2ee": {
"labelToolTip": "La comunicacion àudio e vidèo daquesta sonada es chifrada del cap a la fin"
}
}

View File

@@ -1,21 +1,36 @@
{
"addPeople": {
"add": "Zaproś",
"addContacts": "Zaproś kontakty",
"copyInvite": "Kopiuj zaproszenie na spotkanie",
"copyLink": "Kopiuj link spotkania",
"copyStream": "Kopiuj link transmisji na żywo",
"countryNotSupported": "Nie obsługujemy jeszcze tej lokalizacji.",
"countryReminder": "Dzwonisz spoza USA? Upewnij się, że zaczynasz od kodu kraju!",
"defaultEmail": "Domyślna poczta",
"disabled": "Nie możesz zapraszać ludzi.",
"failedToAdd": "Błąd dodawania uczestników",
"footerText": "Wybieranie numeru jest wyłączone.",
"googleEmail": "Poczta Google",
"inviteMoreHeader": "Jesteś jedynym uczestnikiem tego spotkania",
"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",
"shareInvite": "Udostępnij zaproszenie na spotkanie",
"shareLink": "Udostępnij link do spotkania, aby zaprosić innych uczestników",
"shareStream": "Udostępnij link transmisji na żywo",
"telephone": "Telefon: {{number}}",
"title": "Zaproś ludzi na to spotkanie"
"title": "Zaproś uczestników na to spotkanie",
"yahooEmail": "Poczta Yahoo"
},
"audioDevices": {
"bluetooth": "Bluetooth",
@@ -47,10 +62,10 @@
},
"chat": {
"error": "Błąd: Twoja wiadomość nie została wysłana. Powód: {{error}}",
"fieldPlaceHolder": "",
"fieldPlaceHolder": "Wpisz wiadomość tutaj",
"messagebox": "Wpisz wiadomość",
"messageTo": "Prywatna wiadomość do {{recipient}}",
"noMessagesMessage": "",
"noMessagesMessage": "Aktualnie brak wiadomości w tym spotkaniu. Rozpocznij konwersację!",
"nickname": {
"popover": "Wybierz swój nick",
"title": "Wpisz swoją nazwę, aby użyć rozmowy"
@@ -59,8 +74,13 @@
"title": "Rozmowa",
"you": "Ty"
},
"connectingOverlay": {
"joiningRoom": "Łączenie z Twoim spotkaniem…"
"chromeExtensionBanner": {
"installExtensionText": "Zainstaluj rozszerzenie integrujące Kalendarz Google i Office 365",
"buttonText": "Zainstaluj rozszerzenie Chrome",
"dontShowAgain": "Nie pokazuj ponownie"
},
"connectingOverlay": {
"joiningRoom": "Łączenie ze spotkaniem…"
},
"connection": {
"ATTACHED": "Załącznik",
@@ -72,7 +92,10 @@
"DISCONNECTED": "Rozłączony",
"DISCONNECTING": "Rozłączanie",
"ERROR": "Błąd",
"RECONNECTING": "Wystąpił problem w sieci. Ponowienie połączenia..."
"FETCH_SESSION_ID": "Uzyskiwanie id sesji...",
"GET_SESSION_ID_ERROR": "Nie można uzyskać id sesji. Błąd: {{code}}",
"GOT_SESSION_ID": "Uzyskiwanie id sesji... Gotowe",
"LOW_BANDWIDTH": "Wideo {{displayName}} zostało wyłączone w celu oszczędności zasobów"
},
"connectionindicator": {
"address": "Adres:",
@@ -80,14 +103,14 @@
"bitrate": "Szybkość transmisji:",
"bridgeCount": "Liczba serwerów: ",
"connectedTo": "Podłączone do:",
"e2e_rtt": "E2E RTT:",
"framerate": "Klatek na sekundę:",
"less": "Pokaż mniej",
"localaddress_0": "Adres lokalny:",
"localaddress_1": "Adresy lokalne:",
"localaddress_2": "Adresy lokalne:",
"localport_0": "Port lokalny:",
"localport_1": "Porty lokalne:",
"localport_2": "Porty lokalne:",
"localaddress": "Adres lokalny:",
"localaddress_plural": "Adresy lokalne:",
"localport": "Port lokalny:",
"localport_plural": "Porty lokalne:",
"maxEnabledResolution": "send max",
"more": "Pokaż więcej",
"packetloss": "Utrata pakietów:",
"quality": {
@@ -97,17 +120,14 @@
"nonoptimal": "Nieoptymalne",
"poor": "Słabe"
},
"remoteaddress_0": "Adres zdalny:",
"remoteaddress_1": "Adresy zdalne:",
"remoteaddress_2": "Adresy zdalne:",
"remoteport_0": "Port zdalny:",
"remoteport_1": "Porty zdalne:",
"remoteport_2": "Porty zdalne:",
"remoteaddress": "Adres zdalny:",
"remoteaddress_plural": "Adresy zdalne:",
"remoteport": "Port zdalny:",
"remoteport_plural": "Porty zdalne:",
"resolution": "Rozdzielczość:",
"status": "Połączenie:",
"transport_0": "Transport:",
"transport_1": "Transporty:",
"transport_2": "Transporty:"
"transport": "Transport:",
"transport_plural": "Transporty:"
},
"dateUtils": {
"earlier": "Wcześniej",
@@ -119,13 +139,15 @@
"description": "Nic się nie wydarzyło? Spróbowaliśmy uruchomić Twoje spotkanie w aplikacji stacjonarnej {{app}}. Spróbuj ponownie lub uruchom spotkanie w aplikacji webowej {{app}}.",
"descriptionWithoutWeb": "Nic się nie wydarzyło? Spróbowaliśmy uruchomić Twoje spotkanie w aplikacji stacjonarnej {{app}}.",
"downloadApp": "Pobierz aplikację",
"ifDoNotHaveApp": "Jeśli nie masz jeszcze aplikacji:",
"ifHaveApp": "Jeśli już masz aplikację:",
"joinInApp": "Dołącz do spotkania używając aplikacji",
"launchWebButton": "Uruchom przez przeglądarkę",
"openApp": "Kontynuuj w aplikacji",
"title": "Trwa uruchamianie Twojego spotkania w {{app}}…",
"tryAgainButton": "Spróbuj ponownie w aplikacji stacjonarnej"
},
"defaultLink": "np. {{url}}",
"defaultNickname": "np. Ziutek Kowalski",
"defaultNickname": "np. Jan Kowalski",
"deviceError": {
"cameraError": "Błąd dostępu do Twojej kamery",
"cameraPermission": "Błąd podczas otrzymywania uprawnień do kamery",
@@ -142,6 +164,7 @@
"accessibilityLabel": {
"liveStreaming": "Transmisja na żywo"
},
"add": "Dodaj",
"allow": "Pozwól",
"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",
@@ -168,20 +191,24 @@
"connecting": "Nawiązywanie połączenia",
"contactSupport": "Skontaktuj się ze wsparciem",
"copy": "Kopiuj",
"copied": "Skopiowano",
"dismiss": "Odrzuć",
"displayNameRequired": "Cześć! Jak się nazywasz?",
"done": "Zrobione",
"e2eeDescription": "Szyfrowanie End-to-End jest aktualnie w fazie EKSPERYMENTALNEJ. Proszę mieć na uwadze fakt, że szyfrowanie end-to-end wyłączy oferowane przez serwer usługi takie jak: nagrywanie, streaming na żywo i dołączanie uczestników przez telefon. Proszę mieć również na uwadze fakt, że takie spotkanie 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ę",
"error": "Błąd",
"externalInstallationMsg": "Zainstaluj rozszerzenie naszego współdzielenia ekranu.",
"externalInstallationTitle": "Wymagane rozszerzenie",
"goToStore": "Idź do sklepu",
"gracefulShutdown": "Aktualnie serwis jest konserwowany. Prosze spróbować później.",
"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",
"IamHost": "Jestem gospodarzem",
"incorrectRoomLockPassword": "Hasło nieprawidłowe",
"incorrectPassword": "Niepoprawna nazwa użytkownika lub hasło",
"inlineInstallationMsg": "Zainstaluj rozszerzenie naszego współdzielenia ekranu.",
"inlineInstallExtension": "Zainstaluj teraz",
"internalError": "Ups! Coś poszło nie tak. Wystąpił następujący błąd: {{error}}",
"internalErrorTitle": "Błąd wewnętrzny",
"kickMessage": "Możesz skontaktować się z {{participantDisplayName}}, aby uzyskać więcej szczegółów.",
@@ -189,7 +216,8 @@
"kickParticipantDialog": "Czy na pewno chcesz usunąć tego uczestnika?",
"kickParticipantTitle": "Usunąć tego uczestnika?",
"kickTitle": "Ups! {{participantDisplayName}} usunął Cię z tego spotkania",
"liveStreaming": "Strumień live",
"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ę.",
@@ -205,6 +233,12 @@
"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ć.",
"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}}?",
"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",
"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.",
@@ -216,9 +250,11 @@
"passwordRequired": "$t(lockRoomPasswordUppercase) jest wymagane",
"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",
"recordingDisabledForGuestTooltip": "Goście nie mogą rozpocząć nagrywania.",
"recordingDisabledTooltip": "Rozpoczęcie nagrywania wyłączone.",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Nie możliwe podczas aktywnej transmisji na żywo",
"recordingDisabledForGuestTooltip": "Goście nie mogą uruchamiać nagrywania.",
"recordingDisabledTooltip": "Start recording disabled.",
"rejoinNow": "Połącz ponownie teraz",
"remoteControlAllowedMessage": "{{user}} zaakceptował Twoją prośbę o kontrolę zdalną!",
"remoteControlDeniedMessage": "{{user}} odrzucił Twoją prośbę o kontrolę zdalną!",
@@ -229,27 +265,26 @@
"remoteControlTitle": "Zdalna kontrola komputera",
"Remove": "Usuń",
"removePassword": "Usuń $t(lockRoomPassword)",
"removeSharedVideoMsg": "Na pewno chcesz usunąć współdzielone wideo?",
"removeSharedVideoTitle": "Usuń wideo współdzielone",
"removeSharedVideoMsg": "Na pewno chcesz usunąć udostępnione wideo?",
"removeSharedVideoTitle": "Usuń wideo udostępnione",
"reservationError": "Błąd systemu rezerwacji",
"reservationErrorMsg": "Kod błędu: {{code}}, treść: {{msg}}",
"retry": "Ponów",
"screenSharingFailedToInstall": "Ups! Nie udało się zainstalować wtyczki do współdzielenia ekranu.",
"screenSharingFailedToInstallTitle": "Nie udało się zainstalować wtyczki do współdzielenia ekranu",
"screenSharingFirefoxPermissionDeniedError": "Coś poszło nie tak podczas próby współdzielenia Twojego ekranu. Upewnij się, że udzieliłeś zgody na tą próbę. ",
"screenSharingFirefoxPermissionDeniedTitle": "Ups! Nie byliśmy w stanie rozpocząć współdzielenia ekranu!",
"screenSharingPermissionDeniedError": "Ups! Coś poszło nie tak z prawami dostępu do wtyczki współdzielenia ekranu. Wczytaj ponownie i spróbuj jeszcze raz.",
"screenSharingAudio": "Udostępnianie audio",
"screenSharingFailed": "Oops! Coś poszło nie tak. Nie można uruchomić udostępniania ekranu!",
"screenSharingFailedTitle": "Niepowodzenie udostępniania ekranu!",
"screenSharingPermissionDeniedError": "Oops! Coś poszło nie tak z uprawnieniami udostępniania ekranu. Odśwież stronę i spróbuj ponownie.",
"sendPrivateMessage": "Niedawno otrzymałeś prywatną wiadomość. Czy zamierzałeś odpowiedzieć na nią prywatnie, czy chcesz wysłać wiadomość do grupy?",
"sendPrivateMessageCancel": "Wyślij do grupy",
"sendPrivateMessageOk": "Wyślij prywatnie",
"sendPrivateMessageTitle": "Wysłać prywatnie?",
"serviceUnavailable": "Usługa jest niedostępna",
"sessTerminated": "Połączenie przerwane",
"Share": "Współdziel",
"Share": "Udostępnij",
"shareVideoLinkError": "Podaj proszę prawidłowy link youtube.",
"shareVideoTitle": "Współdziel wideo",
"shareYourScreen": "Włącz współdzielenie ekranu",
"shareYourScreenDisabled": "Współdzielenie ekranu wyłączone.",
"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",
@@ -267,8 +302,8 @@
"transcribing": "Transkrypcja",
"unlockRoom": "Usuń spotkanie $t(lockRoomPassword)",
"userPassword": "hasło użytkownika",
"WaitForHostMsg": "Konferencja <b>{{room}}</b> jeszcze się nie rozpoczęła. Jeśli jesteś gospodarzem, prosimy o uwierzytelnienie. Jeśli nie, prosimy czekać na przybycie gospodarza.",
"WaitForHostMsgWOk": "Konferencja <b>{{room}}</b> jeszcze się nie zaczęła. Jeśli jesteś jej gospodarzem, wybierz Ok, aby się uwierzytelnić. Jeśli nie, prosimy czekać na przybycie gospodarza.",
"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…",
"Yes": "Tak",
"yourEntireScreen": "Cały Twój ekran"
@@ -277,7 +312,13 @@
"statusMessage": "jest teraz {{status}}"
},
"documentSharing": {
"title": "Współdzielony dokument"
"title": "Udostępniony dokument"
},
"e2ee": {
"labelToolTip": "To połączenie audio i wideo jest szyfrowane"
},
"embedMeeting": {
"title": "Osadź to spotkanie"
},
"feedback": {
"average": "Średnio",
@@ -321,7 +362,7 @@
"noRoom": "Nie podano pokoju do wdzwonienia.",
"numbers": "Numery do wdzwonienia",
"password": "$t(lockRoomPasswordUppercase):",
"title": "Współdziel",
"title": "Udostępnij",
"tooltip": "Udostępnij odnośnik i informacje do wdzwonienia się na to spotkanie",
"label": "Poinformuj o spotkaniu"
},
@@ -349,7 +390,7 @@
"pushToTalk": "Naciśnij, aby mówić",
"raiseHand": "Podnieś lub opuść rękę",
"showSpeakerStats": "Pokaż statystyki mówcy",
"toggleChat": "Otwórz lub zamknij rozmowę",
"toggleChat": "Otwórz lub zamknij czat",
"toggleFilmstrip": "Wyświetl lub ukryj miniaturki video",
"toggleScreensharing": "Przełącz pomiędzy kamerą i wspóldzieleniem ekranu",
"toggleShortcuts": "Wyświetl lub ukryj skróty klawiaturowe",
@@ -357,6 +398,8 @@
"videoQuality": "Zarządzanie jakością połączeń"
},
"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>.",
"limitNotificationDescriptionNative": "Twoje strumieniowanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj {{app}}.",
"busy": "Pracujemy nad zwolnieniem zasobów transmisyjnych. Spróbuj ponownie za kilka minut.",
"busyTitle": "Wszyscy transmitujący są aktualnie zajęci",
"changeSignIn": "Przełącz konta.",
@@ -365,7 +408,7 @@
"enterStreamKey": "Wpisz tutaj swój klucz transmisji na żywo YouTube.",
"error": "Transmitowanie na żywo nie powiodło się. Spróbuj ponownie.",
"errorAPI": "Wystąpił błąd podczas uzyskiwania dostępu do transmisji w YouTube. Proszę spróbować zalogować się ponownie.",
"errorLiveStreamNotEnabled": "",
"errorLiveStreamNotEnabled": "Strumieniowanie na żywo nie jest włączone dla {{email}}. Proszę włączyć strumieniowanie na żywo lub zalogować się na konto z włączoną funkcją strumieniowania.",
"expandedOff": "Transmisja na żywo została zatrzymana",
"expandedOn": "Spotkanie jest obecnie transmitowane na YouTube.",
"expandedPending": "Transmisja na żywo rozpoczyna się…",
@@ -384,7 +427,9 @@
"signOut": "Wyloguj się",
"start": "Rozpocznij transmisję na żywo",
"streamIdHelp": "Co to jest?",
"unavailableTitle": "Transmisja na żywo jest niedostępna"
"unavailableTitle": "Transmisja na żywo jest niedostępna",
"youtubeTerms": "Warunki użytkowania YouTube",
"googlePrivacyPolicy": "Polityka prywatności Google"
},
"localRecording": {
"clientState": {
@@ -396,17 +441,17 @@
"duration": "Długość",
"durationNA": "N/D",
"encoding": "Kodowanie",
"label": "",
"label": "LOR",
"labelToolTip": "Nagrywanie lokalne jest włączone",
"localRecording": "Nagrywanie lokalne",
"me": "To ja",
"messages": {
"engaged": "Włączono nagrywanie lokalne.",
"finished": "",
"finishedModerator": "",
"finished": "Sesja nagrywania {{token}} została zakończona. Proszę przesłać nagrane pliki do moderatora.",
"finishedModerator": "Sesja nagrywania {{token}} została zakończona. Nagranie lokalnej ścieżki zostało zapisane. Poproś pozostałych uczestników, aby przesłali swoje nagrania.",
"notModerator": "Nie jesteś moderatorem. Nie możesz rozpoczynać i zatrzymywać lokalnego nagrywania."
},
"moderator": "Moderujący",
"moderator": "Moderator",
"no": "Nie",
"participant": "Uczestnik",
"participantStats": "Statystyki uczestników",
@@ -422,10 +467,10 @@
"connectedOneMember": "{{name}} dołączył do spotkania",
"connectedThreePlusMembers": "{{name}} i {{count}} innych osób dołączyło do spotkania",
"connectedTwoMembers": "{{first}} i {{second}} dołączyli do spotkania",
"disconnected": "rozłączone",
"disconnected": "Rozłączono",
"focus": "Fokus konferencji",
"focusFail": "{{component}} jest niedostępny - ponowienie w ciągu {{ms}} sec",
"grantedTo": "Prawa moderatora przyznane {{to}}!",
"grantedTo": "Prawa moderatora przyznane dla {{to}}!",
"invitedOneMember": "{{name}} został zaproszony",
"invitedThreePlusMembers": "{{name}} i {{count}} innych osób zostało zaproszone",
"invitedTwoMembers": "{{first}} i {{second}} zostali zaproszeni",
@@ -442,16 +487,56 @@
"somebody": "Ktoś",
"startSilentTitle": "Dołączyłeś bez wyjścia dźwiękowego!",
"startSilentDescription": "Ponownie dołącz do spotkania, aby włączyć dźwięk",
"suboptimalBrowserWarning": "",
"suboptimalBrowserWarning": "Obawiamy się, że Twoje wrażenia ze spotkania nie będą zbyt dobre. Staramy się poprawić tą sytuację, a póki co użyj do spotkania jednej z <a href='{{recommendedBrowserPageLink}}' target='_blank'>przeglądarek w pełni obsługiwanych</a>.",
"suboptimalExperienceTitle": "Ostrzeżenie przeglądarki",
"unmute": "Wyłącz wyciszenie",
"newDeviceCameraTitle": "Wykryto nową kamerę",
"newDeviceAudioTitle": "Wykryto nowe urządzenie dźwiękowe",
"newDeviceAction": "Użyj"
"newDeviceAction": "Użyj",
"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!"
},
"passwordSetRemotely": "wybrane przez innego uczestnika",
"passwordDigitsOnly": "",
"passwordDigitsOnly": "Do {{number}} cyfr",
"poweredby": "napędzane dzięki",
"prejoin": {
"audioAndVideoError": "Błąd audio i wideo:",
"audioOnlyError": "Błąd audio:",
"audioTrackError": "Nie można utworzyć ścieżki audio.",
"calling": "Wybieranie",
"callMe": "Zadzwoń do mnie",
"callMeAtNumber": "Zadzwoń do mnie pod ten numer:",
"configuringDevices": "Konfigurowanie urządzeń...",
"connectedWithAudioQ": "Jesteś połączony głosowo?",
"copyAndShare": "Kopiuj i udostępnij link spotkania",
"dialInMeeting": "Wdzwoń się na spotkanie",
"dialInPin": "Wdzwoń się na spotkanie i wprowadź kod PIN:",
"dialing": "Wybieranie",
"doNotShow": "Nie pokazuj ponownie",
"errorDialOut": "Nie udało się wybrać numeru",
"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",
"errorStatusCode": "Błąd wybierania, kod statusu: {{status}}",
"errorValidation": "Weryfikacja numeru zakończona niepowodzeniem",
"iWantToDialIn": "Chcę się wdzwonić",
"joinAudioByPhone": "Dołącz przez telefon",
"joinMeeting": "Dołącz do spotkania",
"joinWithoutAudio": "Dołącz bez dzwięku",
"initiated": "Połączenie zainicjowane",
"linkCopied": "Link skopiowany do schowka",
"lookGood": "Wygląda na to, że Twój mikrofon działa poprawnie",
"or": "lub",
"premeeting": "Przed spotkaniem",
"showScreen": "Włącz ekran Przed spotkaniem",
"startWithPhone": "Uruchom przez telefon",
"screenSharingError": "Błąd udostępniania ekranu:",
"videoOnlyError": "Błąd wideo:",
"videoTrackError": "Nie można utworzyć ścieżki wideo.",
"viewAllNumbers": "zobacz numery"
},
"presenceStatus": {
"busy": "Zajęte",
"calling": "Dzwonienie…",
@@ -474,8 +559,10 @@
},
"raisedHand": "Chcesz się odezwać ?",
"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>.",
"authDropboxText": "Prześlij na Dropbox",
"availableSpace": "",
"availableSpace": "Dostępna przestrzeń: {{spaceLeft}} MB (około {{duration}} minut nagrania)",
"beta": "BETA",
"busy": "Pracujemy nad uwolnieniem zasobów nagrywania. Proszę spróbować ponownie za kilka minut.",
"busyTitle": "Wszystkie urządzenia nagrywania są obecnie zajete",
@@ -484,7 +571,7 @@
"expandedOn": "Spotkanie jest obecnie nagrywane.",
"expandedPending": "Nagrywanie się rozpoczyna…",
"failedToStart": "Nagrywanie nie jest możliwe",
"fileSharingdescription": "Współdziel nagranie z uczestnikami spotkania",
"fileSharingdescription": "Udostępnij nagranie uczestnikom spotkania",
"live": "NA ŻYWO",
"loggedIn": "Zalogowano jako {{userName}}",
"off": "Nagrywanie zatrzymane",
@@ -497,24 +584,31 @@
"serviceName": "Usługa nagrywania",
"signIn": "Zaloguj się",
"signOut": "Wyloguj się",
"unavailable": "",
"unavailable": "Ups! {{serviceName}} w tej chwili niedostępny. Próbujemy rozwiązać ten problem. Spróbuj ponownie później.",
"unavailableTitle": "Nagrywanie niedostępne"
},
"sectionList": {
"pullToRefresh": "Przeciągnij, aby odświeżyć"
},
"security": {
"about": "Możesz dodać a $t(lockRoomPassword) do spotkania. Uczestnicy będą musieli wprowadzić $t(lockRoomPassword) zanim zostaną dołączeni do spotkania.",
"aboutReadOnly": "Uczestnicy posiadający uprawnienia do moderacji mogą ustawić $t(lockRoomPassword) do spotkania. Uczestnicy będą musieli wprowadzić $t(lockRoomPassword) zanim zostaną dołączeni do spotkania.",
"insecureRoomNameWarning": "Nazwa pokoju nie jest bezpieczna. Niepowołaniu uczestnicy mogą dołączyć do spotkania. Proszę rozważyć ustawienie hasła spotkania używając przycisku Opcje zabezpieczeń.",
"securityOptions": "Opcje zabezpieczeń"
},
"settings": {
"calendar": {
"about": "",
"about": "{{appName}} integracji kalendarza służy do bezpiecznego dostępu do kalendarza, aby można było odczytywać nadchodzące wydarzenia.",
"disconnect": "Rozłącz",
"microsoftSignIn": "Zaloguj się z Microsoft",
"signedIn": "",
"signedIn": "Dostęp do wydarzeń kalendarza dla {{email}}. Kliknij poniższy przycisk Rozłącz aby zatrzymać dostęp do wydarzeń kalendarza.",
"title": "Kalendarz"
},
"devices": "Urządzenia",
"followMe": "Wszyscy widzą mnie",
"language": "Język",
"loggedIn": "Zalogowano jako {{name}}",
"microphones": "Mikrofony",
"moderator": "Moderacja",
"more": "Więcej",
"name": "Nazwa",
@@ -522,41 +616,45 @@
"selectAudioOutput": "Wyjście audio",
"selectCamera": "Kamera",
"selectMic": "Mikrofon",
"speakers": "Głośniki",
"startAudioMuted": "Wycisz wszystkich dołączających",
"startVideoMuted": "Ukryj wszystkich dołączających",
"title": "Ustawienia"
},
"settingsView": {
"advanced": "",
"advanced": "Zaawansowane",
"alertOk": "OK",
"alertCancel": "Anuluj",
"alertTitle": "Uwaga",
"alertURLText": "Wprowadzony adres URL serwera jest nieprawidłowy",
"buildInfoSection": "Informacja o kompilacji",
"conferenceSection": "Konferencja",
"disableCallIntegration": "",
"disableP2P": "",
"disableCallIntegration": "Wyłącz natywną integrację połczeń tel.",
"disableP2P": "Wyłącz tryb Peer-To-Peer",
"disableCrashReporting": "Wyłącz raportowanie błędów",
"disableCrashReportingWarning": "Czy na pewno chcesz wyłączyć raportowanie błędów? Ustawienie zacznie funkcjonować po restarcie aplikacji.",
"displayName": "Wyświetlana nazwa",
"email": "E-mail",
"header": "Ustawienia",
"profileSection": "Profil",
"serverURL": "Adres URL serwera",
"showAdvanced": "",
"showAdvanced": "Pokaż ustawienia zawansowane",
"startWithAudioMuted": "Rozpocznij z wyciszonym dźwiękiem",
"startWithVideoMuted": "Rozpocznij z wyłączonym obrazem",
"version": "Wersja"
},
"share": {
"dialInfoText": "",
"dialInfoText": "\n\n=====\n\nChcesz wdzwonić się ze swojego telefonu?\n\n{{defaultDialInNumber}}Kliknij w ten link aby zobaczyć numery wdzwaniania na to spotkanie\n{{dialInfoPageUrl}}",
"mainText": "Kliknij na poniższy odnośnik, aby dołączyć do spotkania:\n{{roomUrl}}"
},
"speaker": "Głośnik",
"speaker": "Mówca",
"speakerStats": {
"hours": "{{count}} godz.",
"minutes": "{{count}} min.",
"name": "Nazwa",
"seconds": "{{count}} sek.",
"speakerStats": "Statystyki mówców",
"speakerTime": ""
"speakerTime": "Czas mówcy"
},
"startupoverlay": {
"policyText": " ",
@@ -576,70 +674,89 @@
"chat": "Przełączanie okna rozmowy",
"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",
"hangup": "Zostaw rozmowę",
"help": "Pomoc",
"invite": "Zapraszaj ludzi",
"invite": "Zaproś uczestników",
"kick": "Usuń uczestnika",
"lobbyButton": "Włącz/wyłącz tryb lobby",
"localRecording": "Przełączanie lokalnych urządzeń sterujących zapisem danych",
"lockRoom": "Przełączenie hasła spotkania",
"moreActions": "Przełączanie menu więcej działań",
"moreActionsMenu": "Więcej działań w menu",
"moreOptions": "Pokaż więcej opcji",
"mute": "Uruchamianie wyciszonego audycji",
"muteEveryone": "Wycisz wszystkich",
"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ę",
"recording": "Przełączanie nagrywania",
"remoteMute": "Wycisz uczestnika",
"security": "Opcje zabezpieczeń",
"Settings": "Ustawienia przełączania",
"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": "",
"show": "Pokaż na scenie",
"speakerStats": "Przełączanie statystyk dotyczących mówców",
"tileView": "Przełącz widok kafelkowy",
"toggleCamera": "Przełączanie kamery",
"toggleFilmstrip": "Przełącz filmstrip",
"videomute": "Przełączanie wyciszonego filmu wideo",
"videoblur": "Przełącz rozmazanie obrazu"
},
"addPeople": "Dodaj ludzi do swojego telefonu",
"addPeople": "Dodaj ludzi do swojej rozmowy",
"audioOnlyOff": "Wyłącz tryb słabego łącza",
"audioOnlyOn": "Włącz tryb słabego łącza",
"audioRoute": "Wybierz urządzenie dźwiękowe",
"authenticate": "Uwierzytelnianie",
"callQuality": "Zarządzanie jakością obrazu",
"chat": "Otwórz / Zamknij rozmowę",
"closeChat": "Zamknij rozmowę",
"documentClose": "Zamknij wspólny dokument",
"documentOpen": "Otwarty współdzielony dokument",
"chat": "Otwórz / Zamknij okno czatu",
"closeChat": "Zamknij czat",
"documentClose": "Zamknij udostępniony dokument",
"documentOpen": "Otwarty udostępniony dokument",
"download": "Pobierz nasze aplikacje",
"enterFullScreen": "Wyświetlanie pełnego ekranu",
"enterTileView": "Wejdź w kafelkowy widok",
"exitFullScreen": "Wyświetlanie pełnego ekranu",
"exitTileView": "Wyjdź z kafelkowego widoku",
"e2ee": "Szyfrowanie End-to-End",
"embedMeeting": "Osadź spotkanie",
"enterFullScreen": "Wyświetl na pełnym ekranie",
"enterTileView": "Wyświetl widok kafelkowy",
"exitFullScreen": "Zamknij pełny ekran",
"exitTileView": "Zamknij widok kafelkowy",
"feedback": "Zostaw swoją opinię",
"hangup": "Opuść",
"hangup": "Opuść spotkanie",
"help": "Pomoc",
"invite": "Zapraszaj ludzi",
"invite": "Zaproś uczestników",
"lobbyButtonDisable": "Wyłącz tryb lobby",
"lobbyButtonEnable": "Włącz tryb lobby",
"login": "Zaloguj",
"logout": "Wyloguj",
"lowerYourHand": "Opuść rękę",
"moreActions": "Więcej działań",
"moreOptions": "Więcej opcji",
"mute": "Włącz / Wyłącz mikrofon",
"noAudioSignalTitle": "",
"noAudioSignalDesc": "",
"noAudioSignalDescSuggestion": "",
"openChat": "Otwórz rozmowę",
"muteEveryone": "Wycisz wszystkich",
"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.",
"noAudioSignalDialInDesc": "Możesz się również wdzwonić korzystając z numerów:",
"noAudioSignalDialInLinkDesc": "Numery wdzwaniania",
"noisyAudioInputTitle": "Twój mikrofon powoduje zakłócenia!",
"noisyAudioInputDesc": "Wygląda na to, że Twój mikrofon powoduje zakłócenia.",
"openChat": "Otwórz czat",
"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ę",
"security": "Opcje zabezpieczeń",
"Settings": "Ustawienia",
"sharedvideo": "Udostępnij wideo w Youtube",
"sharedvideo": "Udostępnij wideo z Youtube",
"shareRoom": "Zaproś kogoś",
"shortcuts": "Wyświetl skróty",
"speakerStats": "Statystyki mówców",
@@ -657,7 +774,7 @@
},
"transcribing": {
"ccButtonTooltip": "Uruchom / Zatrzymaj napisy",
"error": "Przepisywanie się nie powiodło. Proszę spróbować ponownie.",
"error": "Przepisywanie nie powiodło się. Proszę spróbować ponownie.",
"expandedLabel": "Transkrypcja jest obecnie włączona",
"failedToStart": "Błąd uruchomienia transkrypcji",
"labelToolTip": "Spotkanie jest transkrybowane",
@@ -680,7 +797,7 @@
"safariGrantPermissions": "Wybierz <b><i>OK</i></b>, gdy przegladarka zapyta o pozwolenie."
},
"videoSIPGW": {
"busy": "",
"busy": "Pracujemy nad uwolnieniem zasobów. Prosimy spróbować za kilka minut.",
"busyTitle": "Usługa pokoju jest obecnie zajęta",
"errorAlreadyInvited": "{{displayName}} jest już zaproszony",
"errorInvite": "Konferencja nie została jeszcze ustanowiona. Prosimy spróbować ponownie później.",
@@ -709,13 +826,15 @@
},
"videothumbnail": {
"domute": "Wyciszenie",
"domuteOthers": "Wycisz pozostałych",
"flip": "Odwrócenie",
"grantModerator": "Przyznaj prawa moderatora",
"kick": "Wyrzuć",
"moderator": "Moderujący",
"moderator": "Moderator",
"mute": "Uczestnik ma wyciszone audio",
"muted": "Wyciszony",
"remoteControl": "Kontrola zdalna",
"show": "",
"show": "Pokaż na scenie",
"videomute": "Uczestnik zatrzymał kamerę"
},
"welcomepage": {
@@ -730,22 +849,64 @@
},
"calendar": "Kalendarz",
"connectCalendarButton": "Podłącz swój kalendarz",
"connectCalendarText": "",
"connectCalendarText": "Podłącz swój kalendarz aby przeglądać wszystkie Twoje spotkania w {{app}}. Dodaj spotkania {{provider}} do swojego kalendarza i uruchamiaj je jednym kliknięciem.",
"enterRoomTitle": "Rozpocznij nowe spotkanie",
"roomNameAllowedChars": "Nazwa spotkania nie powinna zawierać żadnego z tych znaków: ?, &, :, ', \", %, #.",
"go": "IDŹ",
"goSmall": "IDŹ",
"join": "",
"getHelp": "Pomoc",
"go": "Dalej",
"goSmall": "Dalej",
"info": "Informacje",
"join": "Utwórz / Dołącz",
"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",
"recentListDelete": "Usuń",
"recentListEmpty": "Twoja ostatnia lista jest obecnie pusta. Rozmawiaj ze swoim zespołem, a wszystkie ostatnie spotkania znajdziesz tutaj.",
"reducedUIText": "Witamy w {{app}}!",
"roomNameAllowedChars": "Nazwa spotkania nie powinna zawierać znaków: ?, &, :, ', \", %, #.",
"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ę",
"terms": "Warunki korzystania",
"title": "Bezpieczna, w pełni funkcjonalna i całkowicie bezpłatna wideokonferencja"
},
"lonelyMeetingExperience": {
"button": "Zaproś innych uczestników",
"youAreAlone": "Tylko ty uczestniczysz w tym spotkaniu"
},
"helpView": {
"header": "Centrum pomocy"
},
"lobby": {
"knockingParticipantList": "Oczekujący uczestnicy",
"allow": "Zezwól",
"backToKnockModeButton": "Brak hasła, poproś o dołączenie",
"dialogTitle": "Lobby",
"disableDialogContent": "Lobby jest aktualnie włączone. Ta funkcjonalność zapewnia, że niechciani uczetnicy nie mogą dołączyć do spotkania. Czy chcesz wyłączyć tę opcję?",
"disableDialogSubmit": "Wyłącz",
"emailField": "Podaj adres email",
"enableDialogPasswordField": "Ustaw hasło (opcjonalne)",
"enableDialogSubmit": "Włącz",
"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ć",
"invalidPassword": "Nieprawidłowe hasło",
"joiningMessage": "Dołączysz do spotkania po zaakceptowaniu Twojej prośby",
"joinWithPasswordMessage": "Dołączanie z hasłem, proszę czekać...",
"joinRejectedMessage": "Twoja prośba została odrzucona przez moderatora.",
"joinTitle": "Dołącz do spotkania",
"joiningTitle": "Dołączanie do spotkania...",
"joiningWithPasswordTitle": "Dołączanie z hasłem...",
"knockButton": "Poproś o dołączenie",
"knockTitle": "Ktoś chce dołączyć do spotkania",
"nameField": "Podaj swoje imię",
"notificationLobbyAccessDenied": "{{targetParticipantName}} został odrzucony przez {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} został zaakceptowany przez {{originParticipantName}}",
"notificationLobbyDisabled": "Lobby zostało wyłączone przez {{originParticipantName}}",
"notificationLobbyEnabled": "Lobby zostało włączone przez {{originParticipantName}}",
"notificationTitle": "Lobby",
"passwordField": "Wprowadź hasło",
"passwordJoinButton": "Dołącz",
"reject": "Odrzuć",
"toggleLabel": "Włącz / Wyłącz lobby"
}
}

View File

@@ -269,7 +269,7 @@
"userPassword": "senha do usuário",
"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 hospedeiro...",
"WaitingForHost": "Esperando o anfitrião...",
"Yes": "Sim",
"yourEntireScreen": "Toda sua tela",
"screenSharingAudio": "Compartilhar áudio",
@@ -780,6 +780,33 @@
"chromeExtensionBanner": {
"dontShowAgain": "Não me mostre isso de novo",
"buttonText": "Instalar extensão do Chrome",
"installExtensionText": "Instale a extensão par integração com Google Calendar e Office 365"
"installExtensionText": "Instale a extensão para integrar com Google Calendar e Office 365"
},
"lobby": {
"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?",
"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.",
"enterPasswordButton": "Informe a senha da conferência",
"enterPasswordTitle": "Informe a senha para se juntar à conferência",
"invalidPassword": "Senha inválida",
"joiningMessage": "Você se juntará à conferência tão logo alguém aprove sua solicitação",
"joinWithPasswordMessage": "Tentando entrar com a senha, por favor aguarde...",
"joinRejectedMessage": "Sua solicitação de participação foi rejeitada pelo moderador.",
"joinTitle": "Junte-se à conferência",
"joiningTitle": "Pedindo para se juntar à conferência...",
"joiningWithPasswordTitle": "Participando com senha...",
"knockButton": "Peça para participar",
"knockTitle": "Alguém deseja participar da conferência",
"nameField": "Informe seu nome",
"passwordField": "Informe a senha da conferência",
"passwordJoinButton": "Solicitar",
"reject": "Rejeitar",
"toggleLabel": "Habilitar lobby"
}
}

View File

@@ -1,28 +1,43 @@
{
"addPeople": {
"add": "Пригласить",
"addContacts": "Пригласите других людей",
"copyInvite": "Скопировать приглашение на встречу",
"copyLink": "Скопировать ссылку на встречу",
"copyStream": "Скопировать ссылку на прямую транасляцию",
"countryNotSupported": "Эта страна пока не поддерживается.",
"countryReminder": "Вызов не в США? Пожалуйста, убедитесь, что указали код страны!",
"defaultEmail": "Ваш адрес электронной почты",
"disabled": "Поиск не дал результата.",
"failedToAdd": "Не удалось добавить участников",
"footerText": "Вызов номера отключен.",
"googleEmail": "Электронная почта Google",
"inviteMoreHeader": "Сейчас вы одни в этой встрече",
"inviteMoreMailSubject": "Присоединиться к встрече {{appName}} ",
"inviteMorePrompt": "Пригласить других людей",
"linkCopied": "Ссылка скопирована в буфер обмена",
"loading": "Поиск людей и номеров телефонов",
"loadingNumber": "Проверка номера телефона",
"loadingPeople": "Поиск людей для приглашения",
"noResults": "Поиск не дал результата",
"noValidNumbers": "Пожалуйста, введите номер телефона",
"outlookEmail": "Электронная почта Outlook",
"searchNumbers": "Добавить номера телефонов",
"searchPeople": "Поиск людей",
"searchPeopleAndNumbers": "Поиск людей или добавление их телефонов",
"shareInvite": "Поделиться приглашением на встречу",
"shareLink": "Поделиться ссылкой на встречу чтобы пригласить других",
"shareStream": "Поделиться ссылкой на прямую трансляцию",
"telephone": "Номер: {{number}}",
"title": "Пригласить людей на эту встречу"
"title": "Пригласить людей на эту встречу",
"yahooEmail": "Электронная почта Yahoo"
},
"audioDevices": {
"bluetooth": "Bluetooth",
"headphones": "Наушники",
"none": "Не обнаружены звуковые устройства",
"phone": "Телефон",
"speaker": "Колонка",
"none": "Не обнаружены звуковые устройства"
"speaker": "Колонка"
},
"audioOnly": {
"audioOnly": "Только звук"
@@ -48,21 +63,21 @@
"chat": {
"error": "Ошибка: Ваше сообщение не было отправлено. Причина: {{error}}",
"fieldPlaceHolder": "Введите здесь ваше сообщение",
"messagebox": "Введите сообщение",
"messageTo": "Личное сообщение пользователю {{recipient}}",
"noMessagesMessage": "В конференции пока нет никаких сообщений. Начните разговор!",
"messagebox": "Введите сообщение",
"nickname": {
"popover": "Выберите имя",
"title": "Введите имя для использования чата"
},
"noMessagesMessage": "В конференции пока нет никаких сообщений. Начните разговор!",
"privateNotice": "Личное сообщение пользователю {{recipient}}",
"title": "Чат",
"you": "вы"
},
"chromeExtensionBanner": {
"installExtensionText": "Установите расширение для интеграции с Google Календарь и Office 365",
"buttonText": "Установить расширение Chrome",
"dontShowAgain": "Не показывай мне это снова"
"dontShowAgain": "Не показывай мне это снова",
"installExtensionText": "Установите расширение для интеграции с Google Календарь и Office 365"
},
"connectingOverlay": {
"joiningRoom": "Пытаемся присоединиться к вашей конференции..."
@@ -77,10 +92,11 @@
"DISCONNECTED": "Отключено",
"DISCONNECTING": "Отключение",
"ERROR": "Ошибка",
"RECONNECTING": "Проблема с сетью. Переподключение...",
"FETCH_SESSION_ID": "Получение идентификатора сеанса…",
"GET_SESSION_ID_ERROR": "Ошибка получения идентификатора сеанса: {{code}}",
"GOT_SESSION_ID": "Получение идентификатора сеанса… Готово",
"LOW_BANDWIDTH": "Видео для {{displayName}} приостановлено из-за низкой пропускной способности",
"GOT_SESSION_ID": "Получение идентификатора сеанса … Готово",
"GET_SESSION_ID_ERROR": "Ошибка получения идентификатора сеанса: {{code}}"
"RECONNECTING": "Проблема с сетью. Переподключение..."
},
"connectionindicator": {
"address": "Адрес:",
@@ -115,8 +131,7 @@
"status": "Связь:",
"transport_0": "Метод отправки:",
"transport_1": "Метода отправки:",
"transport_2": "Методов отправки:",
"e2e_rtt": ""
"transport_2": "Методов отправки:"
},
"dateUtils": {
"earlier": "Ранее",
@@ -128,6 +143,9 @@
"description": "Ничего не случилось? Мы попытались запустить вашу встречу в настольном приложении {{app}}. Повторите попытку или запустите ее в веб-приложении {{app}}.",
"descriptionWithoutWeb": "Ничего не произошло? Мы попытались запустить вашу конференцию в настольном приложении {{app}}",
"downloadApp": "Скачать приложение",
"ifDoNotHaveApp": "Если у вас еще нет приложения:",
"ifHaveApp": "Если вы уже установили приложение:",
"joinInApp": "Подключиться к этой встрече используя приложение",
"launchWebButton": "Запустить в браузере",
"openApp": "Перейти к приложению",
"title": "Запуск вашей встречи в {{app}}...",
@@ -147,15 +165,29 @@
"selectADevice": "Выбор устройства",
"testAudio": "Протестировать звук"
},
"dialOut": {
"statusMessage": "сейчас {{status}}"
},
"dialog": {
"Back": "Назад",
"Cancel": "Отмена",
"IamHost": "Я организатор",
"Ok": "Ok",
"Remove": "Удалить",
"Share": "Поделиться",
"Submit": "ОК",
"WaitForHostMsg": "Конференция <b>{{room}}</b> еще не началась. Если вы организатор, пожалуйста, авторизируйтесь. В противном случае дождитесь организатора.",
"WaitForHostMsgWOk": "Конференция <b>{{room}}</b> еще не началась. Если вы организатор, пожалуйста, нажмите Ok для аутентификации. В противном случае, дождитесь организатора.",
"WaitingForHost": "Ждем организатора...",
"Yes": "Да",
"accessibilityLabel": {
"liveStreaming": "Трансляция"
},
"add": "Добавить",
"allow": "Разрешить",
"alreadySharedVideoMsg": "Другой участник уже поделился ссылкой на видео. Данная конференция позволяет одновременно делиться только одним видео.",
"alreadySharedVideoTitle": "Допускается показ только одного видео",
"applicationWindow": "Окно приложения",
"Back": "Назад",
"cameraConstraintFailedError": "Камера не отвечает определенным требованиям.",
"cameraNotFoundError": "Камера не обнаружена.",
"cameraNotSendingData": "Ошибка доступа к камере. Пожалуйста, проверьте, не использует ли камеру какая-нибудь другая программа. Вы можете также выбрать другое устройство из меню настроек или попробовать перезапустить приложение.",
@@ -163,7 +195,6 @@
"cameraPermissionDeniedError": "Нет доступа к камере. Вы можете участвовать во встрече, но другие не будут вас видеть. Используйте значок камеры в адресной строке браузера, чтобы устранить проблему.",
"cameraUnknownError": "Неизвестная ошибка использования камеры.",
"cameraUnsupportedResolutionError": "Ваша камера не поддерживает необходимое разрешение видео.",
"Cancel": "Отмена",
"close": "Закрыть",
"conferenceDisconnectMsg": "Следует проверить интернет-соединение. Попытка восстановления связи через {{seconds}} с.",
"conferenceDisconnectTitle": "Вы отключены.",
@@ -176,21 +207,29 @@
"connectErrorWithMsg": "Ошибка. Невозможно установить связь для вашей встречи: {{msg}}",
"connecting": "Подключение",
"contactSupport": "Связь с поддержкой",
"copied": "Скопировано",
"copy": "Копировать",
"dismiss": "Отклонить",
"displayNameRequired": "Привет! Как тебя зовут?",
"done": "Готово",
"e2eeDescription": "Сквозное шифрование в настоящее время является ЭКСПЕРИМЕНТАЛЬНЫМ. Имейте в виду, что включение сквозного шифрования эффективно отключит сервисы, предоставляемые на стороне сервера, такие как: запись, потоковое вещание и участие по телефону. Также имейте в виду, что собрание будет работать только для людей, присоединяющихся из браузеров с поддержкой вставляемых потоков.",
"e2eeLabel": "E2EE ключ",
"e2eeNoKey": "Отсутствует",
"e2eeSet": "Установить",
"e2eeToggleSet": "Установить ключ",
"e2eeWarning": "ПРЕДУПРЕЖДЕНИЕ. Похоже, что не все участники этой встречи поддерживают сквозное шифрование. Если вы включите его, они не смогут вас ни видеть, ни слышать.",
"enterDisplayName": "Пожалуйста, введите свое имя",
"error": "Ошибка",
"externalInstallationMsg": "Вам необходимо установить наше дополнение для совместного использования рабочего стола.",
"externalInstallationTitle": "Требуется расширение",
"goToStore": "Перейти к интернет-магазину",
"gracefulShutdown": "Технические работы. Пожалуйста, попробуйте позже.",
"IamHost": "Я организатор",
"incorrectRoomLockPassword": "Неверный пароль",
"grantModeratorDialog": "Вы уверены, что хотите сделать этого участника модератором?",
"grantModeratorTitle": "Сделать модератором",
"incorrectPassword": "Ошибка имени пользователя или пароля",
"inlineInstallationMsg": "Вам необходимо установить наше дополнение для совместного использования рабочего стола.",
"incorrectRoomLockPassword": "Неверный пароль",
"inlineInstallExtension": "Установить",
"inlineInstallationMsg": "Вам необходимо установить наше дополнение для совместного использования рабочего стола.",
"internalError": "Что-то пошло не так. Ошибка: {{error}}",
"internalErrorTitle": "Внутренняя ошибка",
"kickMessage": "Вы можете связаться с {{participantDisplayName}} для получения более подробной информации.",
@@ -199,6 +238,7 @@
"kickParticipantTitle": "Выгнать этого участника?",
"kickTitle": "Ай! {{participantDisplayName}} выгнал вас из конференции.",
"liveStreaming": "Трансляция",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Невозможно пока активна запись",
"liveStreamingDisabledForGuestTooltip": "Гости не могут начать трансляцию",
"liveStreamingDisabledTooltip": "Возможность трансляции отключена",
"lockMessage": "Не удалось запереть конференцию",
@@ -214,18 +254,25 @@
"micNotSendingDataTitle": "Ваш микрофон отключен системными настройками",
"micPermissionDeniedError": "Нет доступа к микрофону. Вы можете участвовать во встрече, но другие не будут вас слышать. Используйте значок камеры в адресной строке браузера, чтобы устранить проблему.",
"micUnknownError": "Неизвестная ошибка использования микрофона.",
"muteParticipantBody": "Вы не можете включить им звук, но они могут сделать это сами в любое время.",
"muteParticipantButton": "Выключить звук",
"muteEveryoneDialog": "Вы уверены, что хотите отключить микрофоны у всех? Вы не сможете включить их, но они могут включить себя в любой момент.",
"muteEveryoneElseDialog": "После отключения микрофонов у участников вы не сможете включить их, но они могут включить себя в любой момент.",
"muteEveryoneElseTitle": "Заглушить всех, за исключением {{whom}}?",
"muteEveryoneSelf": "себя",
"muteEveryoneStartMuted": "Теперь у всех микрофоны выключены",
"muteEveryoneTitle": "Заглушить всех?",
"muteParticipantBody": "Вы не можете включить им микрофон, но они могут сделать это сами в любое время.",
"muteParticipantButton": "Заглушить",
"muteParticipantDialog": "Вы уверены, что хотите отключить микрофон у данного пользователя? Вы не сможете отменить это действие, однако он сможет сам снова включить микрофон в любое время.",
"muteParticipantTitle": "Приглушить этого участника?",
"Ok": "Ok",
"passwordLabel": "$t(lockRoomPasswordUppercase)",
"muteParticipantTitle": "Заглушить этого участника?",
"passwordLabel": "Встреча была защищена участником. Пожалуйста, введите $t(lockRoomPasswordUppercase) чтобы присоединиться.",
"passwordNotSupported": "Установка $t(lockRoomPassword) для конференции не поддерживается.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) не поддерживается",
"passwordRequired": "Требуется $t(lockRoomPasswordUppercase)",
"popupError": "Ваш браузер блокирует всплывающие окна этого сайта. Пожалуйста, разрешите всплывающие окна в настройках безопасности браузера и попробуйте снова.",
"popupErrorTitle": "Заблокировано всплывающее окно",
"readMore": "больше",
"recording": "Запись",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Невозможно пока активно потоковое вещание",
"recordingDisabledForGuestTooltip": "Гости не могут записывать",
"recordingDisabledTooltip": "Невозможно начать запись",
"rejoinNow": "Подключиться снова",
@@ -236,13 +283,15 @@
"remoteControlShareScreenWarning": "Если нажмете \"Разрешить\", то поделитесь своим экраном!",
"remoteControlStopMessage": "Сессия удаленного управления завершена!",
"remoteControlTitle": "Удаленное управление рабочим столом",
"Remove": "Удалить",
"removePassword": "Убрать $t(lockRoomPassword)",
"removeSharedVideoMsg": "Уверены, что хотите убрать видео, которым поделились?",
"removeSharedVideoTitle": "Убрать видео",
"reservationError": "Ошибка системы резервирования",
"reservationErrorMsg": "Код ошибки: {{code}}, сообщение: {{msg}}",
"retry": "Повторить",
"screenSharingAudio": "Поделиться аудио",
"screenSharingFailed": "Ой! Кажется что-то пошло не так, мы не можем начать показ экрана!",
"screenSharingFailedTitle": "Сбой показа экрана!",
"screenSharingFailedToInstall": "Ошибка установки расширения для показа экрана.",
"screenSharingFailedToInstallTitle": "Расширение для показа экрана не установлено",
"screenSharingFirefoxPermissionDeniedError": "Что-то пошло не так, когда мы пытались поделиться вашим экраном. Пожалуйста, убедитесь, что вы дали нам разрешение на это. ",
@@ -254,7 +303,6 @@
"sendPrivateMessageTitle": "Отправить личное сообщение?",
"serviceUnavailable": "Служба недоступна",
"sessTerminated": "Связь прервана",
"Share": "Поделиться",
"shareVideoLinkError": "Пожалуйста, укажите корректную ссылку Youtube.",
"shareVideoTitle": "Поделиться видео",
"shareYourScreen": "Показать экран",
@@ -268,7 +316,6 @@
"stopRecordingWarning": "Уверены, что хотите остановить запись?",
"stopStreamingWarning": "Уверены, что хотите остановить трансляцию?",
"streamKey": "Ключ трансляции",
"Submit": "ОК",
"thankYou": "Спасибо, что используете {{appName}}!",
"token": "токен",
"tokenAuthFailed": "Извините, вам не разрешено присоединиться к этому сеансу связи.",
@@ -276,21 +323,17 @@
"transcribing": "Расшифровка",
"unlockRoom": "Убрать $t(lockRoomPassword)",
"userPassword": "пароль пользователя",
"WaitForHostMsg": "Конференция <b>{{room}}</b> еще не началась. Если вы организатор, пожалуйста, авторизируйтесь. В противном случае дождитесь организатора.",
"WaitForHostMsgWOk": "Конференция <b>{{room}}</b> еще не началась. Если вы организатор, пожалуйста, нажмите Ok для аутентификации. В противном случае, дождитесь организатора.",
"WaitingForHost": "Ждем организатора...",
"Yes": "Да",
"yourEntireScreen": "Весь экран",
"muteEveryoneElseTitle": "Заглушить всех, за исключением {{whom}}?",
"screenSharingAudio": "Поделиться аудио",
"muteEveryoneSelf": "себя"
},
"dialOut": {
"statusMessage": "сейчас {{status}}"
"yourEntireScreen": "Весь экран"
},
"documentSharing": {
"title": "Общий Документ"
},
"e2ee": {
"labelToolTip": "Аудио и видео связь по этому вызову защищена сквозным шифрованием"
},
"embedMeeting": {
"title": "Встроить эту встречу"
},
"feedback": {
"average": "Средне",
"bad": "Плохо",
@@ -300,6 +343,9 @@
"veryBad": "Очень плохо",
"veryGood": "Очень хорошо"
},
"helpView": {
"header": "Справка"
},
"incomingCall": {
"answer": "Ответ",
"audioCallTitle": "Входящий звонок",
@@ -313,8 +359,8 @@
"cancelPassword": "Отменить $t(lockRoomPassword)",
"conferenceURL": "Ссылка:",
"country": "Страна",
"dialANumber": "Чтобы присоединиться к конференции, наберите один из этих номеров и введите pin-код",
"dialInConferenceID": "PIN:",
"dialANumber": "Чтобы присоединиться к конференции, наберите один из этих номеров и введите пин-код",
"dialInConferenceID": "ПИН:",
"dialInNotSupported": "К сожалению, набор номера в настоящее время не поддерживается.",
"dialInNumber": "Номер:",
"dialInSummaryError": "Ошибка получения информации о наборе номера. Пожалуйста, повторите попытку позже",
@@ -326,6 +372,7 @@
"inviteURLFirstPartGeneral": "Вас приглашают присоединиться к конференции.",
"inviteURLFirstPartPersonal": "{{name}} приглашает Вас присоединиться к конференции. \n",
"inviteURLSecondPart": "\nПрисоединиться к конференции:\n{{url}}\n",
"label": "Информация о конференции",
"liveStreamURL": "Трансляция:",
"moreNumbers": "Больше номеров",
"noNumbers": "Нет номеров для набора.",
@@ -334,8 +381,13 @@
"numbers": "Номера для набора",
"password": "$t(lockRoomPasswordUppercase):",
"title": "Поделиться",
"tooltip": "Поделитесь ссылкой и номером для подключения к этой конференции",
"label": "Информация о конференции"
"tooltip": "Поделитесь ссылкой и номером для подключения к этой конференции"
},
"inlineDialogFailure": {
"msg": "Небольшая заминка.",
"retry": "Попробовать снова",
"support": "Поддержка",
"supportMsg": "Если это продолжится, свяжитесь с"
},
"inviteDialog": {
"alertText": "Не удалось пригласить некоторых участников.",
@@ -345,12 +397,6 @@
"searchPlaceholder": "Участник или номер телефона",
"send": "Отправить"
},
"inlineDialogFailure": {
"msg": "Небольшая заминка.",
"retry": "Попробовать снова",
"support": "Поддержка",
"supportMsg": "Если это продолжится, свяжитесь с"
},
"keyboardShortcuts": {
"focusLocal": "Фокус на ваше видео",
"focusRemote": "Фокус на видео другого участника",
@@ -383,23 +429,55 @@
"expandedPending": "Начинается прямая трансляция...",
"failedToStart": "Ошибка трансляции видео",
"getStreamKeyManually": "Прямые трансляций не найдены. Попробуйте получить ключ прямой трансляции от YouTube.",
"googlePrivacyPolicy": "Политика конфиденциальности Google",
"invalidStreamKey": "Похоже ключ прямой трансляции неверен.",
"limitNotificationDescriptionNative": "Ваша трансляция будет ограничена {{limit}} мин. Для неограниченного просмотра попробуйте {{app}}.",
"limitNotificationDescriptionWeb": "Из-за высокой нагрузки ваша потоковая передача будет ограничена {{limit}} мин. Для неограниченной потоковой передачи попробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
"off": "Трансляция остановлена",
"offBy": "{{name}} остановил прямую трансляцию",
"on": "Трансляция",
"onBy": "{{name}} начал прямую трансляцию",
"pending": "Начинаем трансляцию...",
"serviceName": "Служба трансляции",
"signedInAs": "В настоящее время вы вошли в систему как:",
"signIn": "Войти через Google",
"signInCTA": "Войдите или введите свой ключ трансляции YouTube.",
"signOut": "Выход",
"signedInAs": "В настоящее время вы вошли в систему как:",
"start": "Начать трансляцию",
"streamIdHelp": "Что это?",
"unavailableTitle": "Трансляция недоступна",
"googlePrivacyPolicy": "Политика конфиденциальности Google",
"youtubeTerms": "Условия использования YouTube"
},
"lobby": {
"disableDialogContent": "В настоящее время включен режим лобби. Эта функция гарантирует, что нежелательные участники не смогут присоединиться к вашей встрече. Вы хотите его отключить?",
"disableDialogSubmit": "Отключить",
"emailField": "Введите ваш адрес электронной почты",
"enableDialogPasswordField": "Установите пароль (необязательно)",
"enableDialogSubmit": "Включить",
"enableDialogText": "Режим лобби позволяет защитить вашу встречу, позволяя людям входить только после официального одобрения модератором.",
"enterPasswordButton": "Введите пароль встречи",
"enterPasswordTitle": "Введите пароль чтобы присоединиться к встрече",
"invalidPassword": "Неверный пароль",
"joinRejectedMessage": "Ваш запрос на присоединение был отклонен модератором.",
"joinTitle": "Присоединиться к встрече",
"joinWithPasswordMessage": "Пытаюсь присоединиться с паролем, подождите...",
"joiningMessage": "Вы присоединитесь к встрече, как только кто-то примет ваш запрос",
"joiningTitle": "Просьба присоединиться к встрече...",
"joiningWithPasswordTitle": "Присоединение с паролем...",
"knockButton": "Попросить присоединиться",
"knockTitle": "Кто-то хочет присоединиться к встрече",
"knockingParticipantList": "Список ожидающих участников",
"nameField": "Введите ваше имя",
"notificationLobbyAccessDenied": "{{originParticipantName}} запретил присоединиться {{targetParticipantName}}",
"notificationLobbyAccessGranted": "{{originParticipantName}}разрешил присоединиться {{targetParticipantName}} ",
"notificationLobbyDisabled": "Лобби отключено пользователем {{originParticipantName}}",
"notificationLobbyEnabled": "Лобби включено пользователем {{originParticipantName}}",
"notificationTitle": "Лобби",
"passwordField": "Введите пароль встречи",
"passwordJoinButton": "Присоединиться",
"reject": "Отказать",
"toggleLabel": "Включить лобби"
},
"localRecording": {
"clientState": {
"off": "Отключен",
@@ -431,8 +509,15 @@
},
"lockRoomPassword": "пароль",
"lockRoomPasswordUppercase": "Пароль",
"lonelyMeetingExperience": {
"button": "Пригласить",
"getHelp": "Получить помощь",
"title": "Защищенная, полнофункциональная и совершенно бесплатная система видеоконференций",
"youAreAlone": "Вы один в видеоконференции"
},
"me": "я",
"notify": {
"OldElectronAPPTitle": "Уязвимость в системе безопасности!",
"connectedOneMember": "{{name}} присоединился к конференции",
"connectedThreePlusMembers": "{{name}} и {{count}} других пользователей присоединились к конференции",
"connectedTwoMembers": "{{first}} и {{second}} присоединились к конференции",
@@ -447,25 +532,64 @@
"me": "Я",
"moderator": "Получены права модератора!",
"muted": "Вы начали разговор без звука.",
"mutedTitle": "Вы без звука!",
"mutedRemotelyTitle": "{{participantDisplayName}} отключил Вам микрофон!",
"mutedRemotelyDescription": "Вы всегда можете включить микрофон, когда будете готовы говорить. Отключите его, когда закончите, чтобы не транслировать шумы в конференцию.",
"mutedRemotelyTitle": "{{participantDisplayName}} отключил Вам микрофон!",
"mutedTitle": "Вы без звука!",
"newDeviceAction": "Использовать",
"newDeviceAudioTitle": "Обнаружено новое аудиоустройство",
"newDeviceCameraTitle": "Обнаружена новая камера",
"oldElectronClientDescription1": "Похоже, вы используете старую версию клиента Jitsi Meet, которая имеет известные уязвимости в системе безопасности. Убедитесь, что вы обновили до нашей ",
"oldElectronClientDescription2": "последней версии",
"oldElectronClientDescription3": " сейчас!",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) удален другим участником.",
"passwordSetRemotely": "Другой участник установил $t(lockRoomPasswordUppercase)",
"raisedHand": "{{name}} хотел бы выступить.",
"somebody": "Кто-то",
"startSilentTitle": "У вас отсутствует звук!",
"startSilentDescription": "Перезайдите в конференцию, чтобы включить звук",
"startSilentTitle": "У вас отсутствует звук!",
"suboptimalBrowserWarning": "К сожалению, ваш браузер не полностью поддерживает данную систему вэбконференций. Мы работаем над проблемой, однако, пока рекомендуем вам воспользоваться <a href='{{recommendedBrowserPageLink}}' target='_blank'> следующими браузерами</a>.",
"suboptimalExperienceTitle": "Предупреждение браузера",
"unmute": "Включить микрофон",
"newDeviceCameraTitle": "Обнаружена новая камера",
"newDeviceAudioTitle": "Обнаружено новое аудиоустройство",
"newDeviceAction": "Использовать"
"unmute": "Включить микрофон"
},
"passwordSetRemotely": "установлен другим участником",
"passwordDigitsOnly": "До {{number}} цифр",
"passwordSetRemotely": "установлен другим участником",
"poweredby": "работает на",
"prejoin": {
"audioAndVideoError": "Ошибка звука и видео:",
"audioOnlyError": "Ошибка звука:",
"audioTrackError": "Не удалось создать аудио дорожку.",
"callMe": "Позвоните мне",
"callMeAtNumber": "Позвоните мне по этому номеру:",
"calling": "Вызываем",
"configuringDevices": "Настраиваются устройства...",
"connectedWithAudioQ": "Вы подключили звук?",
"copyAndShare": "Скопировать и поделиться ссылкой на встречу",
"dialInMeeting": "Дозвониться до встречи",
"dialInPin": "Дозвониться до встречи и ввести ПИН код:",
"dialing": "Дозвон",
"doNotShow": "Не показывать снова",
"errorDialOut": "Не удалось дозвониться",
"errorDialOutDisconnected": "Не удалось дозвониться. Отключено",
"errorDialOutFailed": "Не удалось дозвониться. Сбой вызова",
"errorDialOutStatus": "Ошибка получения статуса вызова",
"errorStatusCode": "Ошибка вызова, код статуса: {{status}}",
"errorValidation": "Проверка номера не удалась",
"iWantToDialIn": "Я хочу дозвониться",
"initiated": "Вызов инициирован",
"joinAudioByPhone": "Подключиться с телефонной связью",
"joinMeeting": "Присоединиться ко встрече",
"joinWithoutAudio": "Присоединиться без звука",
"linkCopied": "Ссылка скопирована в буфер обмена",
"lookGood": "Кажется ваш микрофон работает правильно",
"or": "или",
"premeeting": "Перед подключением",
"screenSharingError": "Ошибка показа экрана:",
"showScreen": "Включить экран перед подключением",
"startWithPhone": "Начать с телефонной связью",
"videoOnlyError": "Ошибка видео:",
"videoTrackError": "Не удалось создать видео дорожку.",
"viewAllNumbers": "посмотреть всех участников"
},
"presenceStatus": {
"busy": "Занят",
"calling": "Вызываю...",
@@ -499,14 +623,16 @@
"expandedPending": "Начинаем запись конференции...",
"failedToStart": "Ошибка начала записи",
"fileSharingdescription": "Поделиться записью с участниками конференции",
"live": "Прямая трансляция",
"limitNotificationDescriptionNative": "Из-за высокой нагрузки ваша запись будет ограничена {{limit}} мин. Для неограниченного количества записей попробуйте <3> {{app}} </3>.",
"limitNotificationDescriptionWeb": "Из-за высокой нагрузки ваша запись будет ограничена {{limit}} мин. Для неограниченного количества записей попробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"live": "В ЭФИРЕ",
"loggedIn": "Вошел как {{userName}}",
"off": "Запись остановлена",
"offBy": "{{name}} остановил запись",
"on": "Запись",
"onBy": "{{name}} включил запись",
"pending": "Подготовка записи конференции. . .",
"rec": дет запись",
"rec": ДЕТ ЗАПИСЬ",
"serviceDescription": "Ваша запись будет сохранена соответствующей службой",
"serviceName": "Служба записи",
"signIn": "Вход",
@@ -517,6 +643,12 @@
"sectionList": {
"pullToRefresh": "Потяните для обновления"
},
"security": {
"about": "Вы можете добавить к собранию $t(lockRoomPassword). Участникам необходимо будет предоставить $t(lockRoomPassword), прежде чем им будет разрешено присоединиться к собранию.",
"aboutReadOnly": "Участники-модераторы могут добавить к собранию $t(lockRoomPassword). Участникам необходимо будет предоставить $t(lockRoomPassword), прежде чем им будет разрешено присоединиться к собранию.",
"insecureRoomNameWarning": "Имя комнаты небезопасно. Нежелательные участники могут присоединиться к вашей конференции. Подумайте о том, чтобы защитить вашу встречу используя настройки безопасности.",
"securityOptions": "Настройки безопасности"
},
"settings": {
"calendar": {
"about": "Интеграция с календарем {{appName}} используется для безопасного доступа к вашему календарю и синхронизации запланированных мероприятий.",
@@ -529,6 +661,7 @@
"followMe": "Все следуют за мной",
"language": "Язык",
"loggedIn": "Вошел как {{name}}",
"microphones": "Микрофоны",
"moderator": "Модератор",
"more": "Больше опций",
"name": "Имя",
@@ -536,11 +669,10 @@
"selectAudioOutput": "Звуковой выход",
"selectCamera": "Камера",
"selectMic": "Микрофон",
"speakers": "Динамики",
"startAudioMuted": "Все начинают с выключенным звуком",
"startVideoMuted": "Все начинают в скрытом режиме",
"title": "Настройки",
"speakers": "Динамики",
"microphones": "Микрофоны"
"title": "Настройки"
},
"settingsView": {
"advanced": "Дополнительные",
@@ -550,6 +682,8 @@
"buildInfoSection": "Информация о сборке",
"conferenceSection": "Номера для набора",
"disableCallIntegration": "Отключить встроенную интеграцию вызовов",
"disableCrashReporting": "Отключить отправку отчетов о сбоях",
"disableCrashReportingWarning": "Вы действительно хотите отключить отчеты о сбоях? Настройка будет применена после перезапуска приложения.",
"disableP2P": "Отключить режим Peer-To-Peer",
"displayName": "Отображаемое имя",
"email": "Email",
@@ -565,7 +699,7 @@
"dialInfoText": "\n\n=====\n\nПросто хотите набрать номер на Вашем телефоне?\n\n{{defaultDialInNumber}}Щелкните на эту ссылку, чтобы просмотреть телефонные номера для этой конференции\n{{dialInfoPageUrl}}",
"mainText": "Нажмите на ссылку чтобы присоединиться к конференции:\n{{roomUrl}}"
},
"speaker": "Колонка",
"speaker": "Спикер",
"speakerStats": {
"hours": "{{count}}ч",
"minutes": "{{count}}м",
@@ -584,7 +718,9 @@
"title": "Видеосвязь прервана. Причина: этот компьютер перешел в режим сна."
},
"toolbar": {
"Settings": "Настройки",
"accessibilityLabel": {
"Settings": "Вкл/Выкл меню настроек",
"audioOnly": "Вкл/Выкл только звук",
"audioRoute": "Выбрать аудиоустройство",
"callQuality": "Качество связи",
@@ -592,36 +728,41 @@
"chat": "Показать/скрыть окно чата",
"document": "Закрыть общий документ",
"download": "Скачать приложение",
"e2ee": "Сквозное шифрование",
"embedMeeting": "Встроить встречу",
"feedback": "Оставить отзыв",
"fullScreen": "Полноэкранный/оконный режим",
"grantModerator": "Сделать модератором",
"hangup": "Завершить звонок",
"help": "Справка",
"invite": "Пригласить",
"kick": "Выкинуть участника",
"lobbyButton": "Вкл/Выкл режим лобби",
"localRecording": "Вкл/Выкл кнопки записи",
"lockRoom": "Установить пароль",
"moreActions": "Показать/скрыть меню доп. настроек",
"moreOptions": "Меню доп. настроек",
"moreActionsMenu": "Меню доп. настроек",
"moreOptions": "Меню доп. настроек",
"mute": "Вкл/Выкл звук",
"muteEveryone": "Выкл. микрофон у всех",
"pip": "Вкл/Выкл режим Картинка-в-картинке",
"privateMessage": "Отправить личное сообщение",
"profile": "Редактировать профиль",
"raiseHand": "Поднять руку",
"recording": "Вкл/Выкл запись",
"remoteMute": "Отключить участнику микрофон",
"Settings": "Вкл/Выкл меню настроек",
"sharedvideo": "Вкл/Выкл Youtube - трансляцию",
"security": "Настройки безопасности",
"shareRoom": "Отправить приглашение",
"shareYourScreen": "Вкл/Выкл демонстрацию экрана",
"sharedvideo": "Вкл/Выкл Youtube - трансляцию",
"shortcuts": "Вкл/Выкл значки",
"show": "Показать крупным планом",
"speakerStats": "Вкл/Выкл статистику",
"tileView": "Вкл/Выкл плитку",
"toggleCamera": "Переключить камеру",
"videomute": "Вкл/Выкл видео",
"muteEveryone": "Выкл. микрофон у всех",
"videoblur": "Вкл/Выкл размытие фона"
"toggleFilmstrip": "Включить диафильм",
"videoblur": "Вкл/Выкл размытие фона",
"videomute": "Вкл/Выкл видео"
},
"addPeople": "Добавить людей к вашему сеансу связи",
"audioOnlyOff": "Отключить режим экономии пропуской способности",
@@ -634,6 +775,8 @@
"documentClose": "Закрыть общий документ",
"documentOpen": "Открыть общий документ",
"download": "Скачать приложение",
"e2ee": "Сквозное шифрование",
"embedMeeting": "Встроить встречу",
"enterFullScreen": "Полный экран",
"enterTileView": "Общий план",
"exitFullScreen": "Полный экран",
@@ -642,39 +785,44 @@
"hangup": "Выход",
"help": "Справка",
"invite": "Пригласить",
"lobbyButtonDisable": "Отключить режим лобби",
"lobbyButtonEnable": "Включить режим лобби",
"login": "Войти",
"logout": "Завершить сеанс",
"lowerYourHand": "Опустить руку",
"moreActions": "Больше",
"moreActions": "Больше действий",
"moreOptions": "Больше настроек",
"mute": "Микрофон (вкл./выкл.)",
"muteEveryone": "Выкл. микрофон у всех",
"noAudioSignalTitle": "От вашего микрофона не идет звуковой сигнал!",
"noAudioSignalDesc": "Если вы специально не отключали микрофон в системных настройках, подумайте о том, чтобы поменять его.",
"noAudioSignalDescSuggestion": "Если вы специально не отключали микрофон в системных настройках, вы можете попробовать использовать следующее устройство:",
"noisyAudioInputTitle": "Похоже, ваш микрофон создает шум!",
"noAudioSignalDialInDesc": "Вы можете также дозвониться используя:",
"noAudioSignalDialInLinkDesc": "Номера для дозвона",
"noAudioSignalTitle": "От вашего микрофона не идет звуковой сигнал!",
"noisyAudioInputDesc": "Возможно, ваш микрофон создает шум. Вы можете выключить его или смените устройство.",
"noisyAudioInputTitle": "Похоже, ваш микрофон создает шум!",
"openChat": "Открыть чат",
"pip": "Вкл режим Картинка-в-картинке",
"privateMessage": "Отправить личное сообщение",
"profile": "Редактировать профиль",
"raiseHand": "Хочу говорить",
"raiseYourHand": "Поднять руку",
"Settings": "Настройки",
"sharedvideo": "Видео YouTube",
"security": "Настройки безопасности",
"shareRoom": "Отправить приглашение",
"sharedvideo": "Видео YouTube",
"shortcuts": "Комбинации клавиш",
"speakerStats": "Статистика",
"startScreenSharing": "Начать трансляцию с экрана",
"startSubtitles": "Включить субтитры",
"startvideoblur": "Размыть фон на видео",
"stopScreenSharing": "Остановить трансляцию с экрана",
"stopSubtitles": "Отключить субтитры",
"stopSharedVideo": "Остановить видео на YouTube",
"stopSubtitles": "Отключить субтитры",
"stopvideoblur": "Отключить размытие фона",
"talkWhileMutedPopup": "Пытаетесь говорить? У вас отключен звук.",
"tileViewToggle": "Вкл/выкл плитку",
"toggleCamera": "Вкл/выкл камеру",
"videomute": "Камера",
"startvideoblur": "Размыть фон на видео",
"stopvideoblur": "Отключить размытие фона"
"videomute": "Камера"
},
"transcribing": {
"ccButtonTooltip": "Вкл. / Выкл. субтитры",
@@ -685,8 +833,7 @@
"off": "Расшифровка остановлена",
"pending": "Подготовка расшифровки конференции...",
"start": "Вкл/Выкл показ субтитров",
"stop": "Вкл/Выкл показ субтитров",
"tr": ""
"stop": "Вкл/Выкл показ субтитров"
},
"userMedia": {
"androidGrantPermissions": "Выберите <b><i>Разрешить</i></b>, когда браузер спросит о разрешениях.",
@@ -732,6 +879,7 @@
"domute": "Выключить звук",
"domuteOthers": "Выключить остальных",
"flip": "Отразить",
"grantModerator": "Сделать модератором",
"kick": "Выкинуть",
"moderator": "Модератор",
"mute": "Без звука",
@@ -754,26 +902,22 @@
"connectCalendarButton": "Привязать календарь",
"connectCalendarText": "Подключите календарь, чтобы увидеть все ваши конференции в {{app}}. Кроме того, добавив {{provider}} конференций в календарь, вы сможете запускать их одним щелчком мышки.",
"enterRoomTitle": "Начать новую видеоконференцию",
"roomNameAllowedChars": "Название конференции не должно содержать следующие символы: ?, &, :, ', \", %, #.",
"getHelp": "Справка",
"go": "ОК",
"goSmall": "ОК",
"join": "СОЗДАТЬ / ПРИСОЕДИНИТЬСЯ",
"info": "Инфо",
"join": "СОЗДАТЬ / ПРИСОЕДИНИТЬСЯ",
"moderatedMessage": "Или заранее <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">зарезервируйте URL-адрес встречи</a>, где вы будете единственным модератором.",
"privacy": "Приватность",
"recentList": "Недавние",
"recentListDelete": "Удалить",
"recentListEmpty": "Сейчас ваш список недавно проведенных конференций пуст. По мере вашего пользования сервисом он будет пополняться.",
"reducedUIText": "Добро пожаловать в {{app}}!",
"roomNameAllowedChars": "Название конференции не должно содержать следующие символы: ?, &, :, ', \", %, #.",
"roomname": "Укажите название комнаты",
"roomnameHint": "Укажите название комнаты или ее адрес. Можете сами создать название и передать его будущим участникам встречи, чтобы они использовали именно его.",
"sendFeedback": "Обратная связь",
"terms": "Условия",
"title": "Защищенная, полнофункциональная и совершенно бесплатная система видеоконференций"
},
"lonelyMeetingExperience": {
"button": "Пригласить",
"youAreAlone": "Вы один в видеоконференции",
"title": "Защищенная, полнофункциональная и совершенно бесплатная система видеоконференций",
"getHelp": "Получить помощь"
}
}

View File

@@ -189,10 +189,7 @@
"dismiss": "Prekliči",
"displayNameRequired": "Pozdravljeni! Kako vam je ime?",
"done": "Končano",
"e2eeDescription": "<p>End-to-End Encryption is currently <strong>EXPERIMENTAL</strong>. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details.</p><br/><p>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.</p>",
"e2eeLabel": "Key",
"e2eeTitle": "End-to-End Encryption",
"e2eeWarning": "<br /><p><strong>WARNING:</strong> 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.</p>",
"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": "Prosimo vnesite svoje ime",
"error": "Napaka",
"externalInstallationMsg": "Potrebno je namestiti razširitev za deljenje namizja.",

View File

@@ -1,19 +1,33 @@
{
"addPeople": {
"add": "Davet et",
"addContacts": "Kişilerinizi davet edin",
"copyInvite": "Toplantı davetini kopyala",
"copyLink": "Toplantı bağlantısını kopyala",
"copyStream": "Canlı akış bağlantısını kopyala",
"countryNotSupported": "Ülke henüz desteklenmiyor",
"countryReminder": "Dış bir ülkeyi mi arıyorsunuz? Lütfen ülke koduyla başlayın!",
"defaultEmail": "Varsayılan E-postanız",
"disabled": "Kişi davet edemezsiniz.",
"failedToAdd": "Kişi eklenemedi",
"footerText": "Dış arama devre dışı.",
"loading": "Kişiler ve telefon numaraları aranıyor..",
"googleEmail": "Google Email",
"inviteMoreHeader": "Toplantıdaki tek kişisiniz",
"inviteMoreMailSubject": "{{appName}} toplantısına katıl",
"inviteMorePrompt": "Daha fazla kişi davet et",
"linkCopied": "Bağlantı panoya kopyalandı",
"loading": "Kişiler ve telefon numaraları aranıyor...",
"loadingNumber": "Telefon numarası doğrulanıyor",
"loadingPeople": "Davet edilecek kişi aranıyor",
"noResults": "Eşleşen sonuç bulunamadı",
"noValidNumbers": "Lütfen bir telefon numarası girin",
"outlookEmail": "Outlook Email",
"searchNumbers": "Telefon numarası ekle",
"searchPeople": "Kişi ara",
"searchPeopleAndNumbers": "Kişi arayın veya telefon numarası ekleyin",
"shareInvite": "Toplantı davetini paylaş",
"shareLink": "Katılımcıları davet etmek için toplantı bağlantısını paylaşın",
"shareStream": "Canlı akış bağlantısını paylaşın",
"telephone": "Telefon numarası: {{number}}",
"title": "Bu toplantıya kişi davet edin"
},
@@ -22,13 +36,13 @@
"headphones": "Kulaklık",
"phone": "Telefon",
"speaker": "Konuşmacı",
"none": "Ses cihazı yok"
"none": "Geçerli Ses cihazı yok"
},
"audioOnly": {
"audioOnly": "Düşük bant genişliği"
},
"calendarSync": {
"addMeetingURL": "Toplantı bağlantısı ekle",
"addMeetingURL": "Bir toplantı bağlantısı ekle",
"confirmAddLink": "Bu etkinliğe bir toplantı bağlantısı eklensin mi?",
"error": {
"appConfiguration": "Takvim entegrasyonu doğru yapılandırılmadı.",
@@ -47,20 +61,21 @@
},
"chat": {
"error": "Hata: mesajınız gönderilmedi. Gerekçe: {{error}}",
"fieldPlaceHolder": "Mesajınızı buraya yazın",
"messagebox": "Bir mesaj yazın",
"messageTo": "{{recipient}} adlı kişiye özel mesaj",
"noMessagesMessage": "Toplantıda henüz mesaj yok. Burada bir konuşma başlatın!",
"nickname": {
"popover": "Bir takma ad seçin",
"title": "Sohbette kullanmak için bir takma ad girin"
},
"privateNotice": "{{recipient}} için özel mesaj",
"title": "Sohbet",
"you": "sen",
"privateNotice": "{{recipient}} için özel mesaj",
"noMessagesMessage": "Toplantıda henüz mesaj yok. Buradan bir konuşma başlatın!",
"messageTo": "{{recipient}} için özel mesaj",
"fieldPlaceHolder": "Mesajınızı buraya yazın"
"you": "sen"
},
"connectingOverlay": {
"joiningRoom": "Toplantınıza bağlanılıyor.."
"joiningRoom": "Toplantıya bağlanılıyor..."
},
"connection": {
"ATTACHED": "Eklenmiş",
@@ -70,7 +85,7 @@
"CONNECTING": "Bağlanıyor",
"CONNFAIL": "Bağlantı başarısız",
"DISCONNECTED": "Bağlantı kesildi",
"DISCONNECTING": "Bağlantı kesildi",
"DISCONNECTING": "Bağlantı kesiliyor",
"ERROR": "Hata",
"RECONNECTING": "Bir bağlantı hatası oluştu. Tekrar bağlanıyor...",
"LOW_BANDWIDTH": "Bant genişliğinden tasarruf etmek için {{displayName}} kişisinin videosu kapatıldı",
@@ -83,7 +98,7 @@
"bandwidth": "Tahmini bant genişliği:",
"bitrate": "Bit hızı:",
"bridgeCount": "Sunucu sayısı: ",
"connectedTo": "Bağlandı:",
"connectedTo": "Bağlandı şuna:",
"framerate": "Çerçeve hızı:",
"less": "Daha az göster",
"localaddress": "Yerel adres:",
@@ -117,8 +132,11 @@
"deepLinking": {
"appNotInstalled": "Bu toplantıya katılmak için {{app}} uygulamasına ihtiyacınız var.",
"description": "Hiçbir şey olmadı mı? Toplantınızı {{app}} masaüstü uygulamasında başlatmaya çalıştık. Tekrar deneyin veya {{app}} web uygulamasınıın.",
"descriptionWithoutWeb": "",
"descriptionWithoutWeb": "Hiçbir şey olmadı? Toplantınızı {{app}} masaüstü uygulamasında başlatmayı denedik.",
"downloadApp": "Uygulamayı indir",
"ifDoNotHaveApp": "Henüz uygulamanız yoksa:",
"ifHaveApp": "Uygulamanız zaten varsa: ",
"joinInApp": "Uygulamayı kullanarak bu toplantıya katıl",
"launchWebButton": "Web'de aç",
"openApp": "Uygulamaya devam et",
"title": "Toplantınız {{app}} uygulamasında açılıyor...",
@@ -134,20 +152,22 @@
"deviceSelection": {
"noPermission": "İzin alınamadı",
"previewUnavailable": "Önizleme mevcut değil",
"selectADevice": "Cihaz seç",
"selectADevice": "Bir cihaz seç",
"testAudio": "Bir test sesi çal"
},
"dialog": {
"accessibilityLabel": {
"liveStreaming": "Canlı akış"
},
"add": "Ekle",
"allow": "İzin ver",
"alreadySharedVideoMsg": "Başka zaten bir video paylaşıyor. Bu toplantı aynı anda yalnızca bir paylaşılan videoya izin veriyor.",
"alreadySharedVideoTitle": "Yalnızca bir paylaşılan videoya izin veriliyor",
"alreadySharedVideoMsg": "Başka bir katılımcı zaten bir video paylaşıyor. Bu konferans aynı anda yalnızca bir paylaşılan videoya izin verir.",
"alreadySharedVideoTitle": "Aynı anda yalnızca bir paylaşılan videoya izin verilir.",
"applicationWindow": "Uygulama penceresi",
"Back": "Geri",
"cameraConstraintFailedError": "Kameranız gerekli bazı özellikleri karşılayamıyor.",
"cameraNotFoundError": "Kamera bulunamadı",
"cameraNotFoundError": "Kamera bulunamadı.",
"cameraNotSendingData": "Kameranıza erişemiyoruz. Lütfen başka bir uygulamanın bu cihazı kullanıp kullanmadığını kontrol edin, Ayarlar menüsünden başka bir cihaz seçin veya uygulamayı yeniden yüklemeyi deneyin.",
"cameraNotSendingDataTitle": "Kameraya erişilemiyor",
"cameraPermissionDeniedError": "Kamera kullanımına izin vermediniz. Yine de toplantıya katılabilirsiniz, ancak diğerleri sizi göremez. Bunu düzeltmek için kamera butonunu kullanın.",
@@ -155,9 +175,9 @@
"cameraUnsupportedResolutionError": "Kameranız gerekli video çözünürlüğünü desteklemiyor.",
"Cancel": "İptal",
"close": "Kapat",
"conferenceDisconnectMsg": "Ağ bağlantınızı kontrol etmek isteyebilirsiniz. {{seconds}} saniye içinde yeniden bağlanıyor ...",
"conferenceDisconnectMsg": "Ağ bağlantınızı kontrol etmek isteyebilirsiniz. {{seconds}} saniye içinde yeniden bağlanıyor...",
"conferenceDisconnectTitle": "Bağlantınız kesildi.",
"conferenceReloadMsg": "Bunu düzeltmeye çalışıyoruz. {{seconds}} saniye içinde yeniden bağlanıyor ...",
"conferenceReloadMsg": "Bunu düzeltmeye çalışıyoruz. {{seconds}} saniye içinde yeniden bağlanıyor...",
"conferenceReloadTitle": "Ne yazık ki bir şeyler ters gitti.",
"confirm": "Onayla",
"confirmNo": "Hayır",
@@ -168,27 +188,28 @@
"contactSupport": "Destek ekibine erişin",
"copy": "Kopyala",
"dismiss": "Son ver",
"displayNameRequired": "Görünür ad gerekli",
"displayNameRequired": "Merhaba, görünmesini istediğin ismin nedir?",
"done": "Bitti",
"enterDisplayName": "Lütfen bir görünür ad girin",
"enterDisplayName": "Lütfen adınızı buraya girin...",
"error": "Hata",
"externalInstallationMsg": "Masaüstü paylaşım uzantımızı yüklemeniz gerekmektedir.",
"externalInstallationTitle": "Uzantı gerekli",
"goToStore": "Mağazaya git",
"gracefulShutdown": "Hizmetimiz şu anda bakım için devre dışı. Lütfen daha sonra tekrar deneyiniz.",
"IamHost": "Toplantı sahibiyim",
"incorrectRoomLockPassword": "",
"incorrectRoomLockPassword": "Yanlış paralo",
"incorrectPassword": "Kullanıcı adı veya parola hatalı",
"inlineInstallationMsg": "Masaüstü paylaşım uzantımızı yüklemeniz gerekmektedir.",
"inlineInstallExtension": "Şimdi yükle",
"internalError": "Hata! Bir şeyler ters gitti. Şu hata oluştu: {{error}}",
"internalErrorTitle": "İç hata",
"kickMessage": "Ah! Toplantıdan çıkarıldınız!",
"kickMessage": "Daha fazla ayrıntı için {{participantDisplayName}} ile iletişime geçebilirsiniz.",
"kickParticipantButton": ıkar",
"kickParticipantDialog": "Bu katılımcıyı çıkarmak istediğinizden emin misiniz?",
"kickParticipantTitle": "Bu katılımcı çıkarılsın mı?",
"kickTitle": "Toplantıdan çıkarıldı",
"kickTitle": "Ah! {{participantDisplayName}} sizi toplantıdan çıkardı.",
"liveStreaming": "Canlı akış",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Kayıt etkinken mümkün değil",
"liveStreamingDisabledForGuestTooltip": "Konuklar canlı akışa başlayamaz.",
"liveStreamingDisabledTooltip": "Canlı akışı başlatma devre dışı.",
"lockMessage": "Toplantı kilitlenemedi.",
@@ -201,21 +222,22 @@
"micConstraintFailedError": "Mikrofonunuz gerekli özelliklerin bazılarını karşılayamıyor.",
"micNotFoundError": "Mikrofon bulunamadı.",
"micNotSendingData": "Mikrofonunuza erişemiyoruz. Lütfen Ayarlar menüsünden başka bir cihaz seçin veya uygulamayı yeniden yüklemeyi deneyin.",
"micNotSendingDataTitle": "Mikrofona erişilemiyor",
"micNotSendingDataTitle": "Mikrofona erişilemiyor.",
"micPermissionDeniedError": "Mikrofon kullanımına izin vermediniz. Yine de toplantıya katılabilirsiniz, ancak diğerleri sizi duyamaz. Bunu düzeltmek için mikrofon butonunu kullanın.",
"micUnknownError": "Bilinmeyen bir nedenden dolayı mikrofon kullanılamıyor.",
"muteParticipantBody": "Bunların sesini açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
"muteParticipantBody": "Sesi açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
"muteParticipantButton": "Sustur",
"muteParticipantDialog": "Bu katılımcının sesini kapatmak istediğinizden emin misiniz? Bunların sesini açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
"muteParticipantDialog": "Bu katılımcının sesini kapatmak istediğinizden emin misiniz? Sesini açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
"muteParticipantTitle": "Bu katılımcı susturulsun mu?",
"Ok": "Tamam",
"passwordLabel": "Parola",
"passwordLabel": "Toplantı bir katılımcı tarafından kilitlendi. Lütfen giriş yapmak için $t(lockRoomPassword) giriniz.",
"passwordNotSupported": "Toplantı parolası ayarlama desteklenmiyor.",
"passwordNotSupportedTitle": "Parola desteklenmiyor",
"passwordRequired": "Parola gerekli",
"popupError": "Tarayıcınız bu siteden açılan pencereleri engelliyor. Lütfen tarayıcınızın güvenlik ayarlarından açılır pencereleri etkinleştirin ve tekrar deneyin.",
"popupErrorTitle": "Açılır pencere engellendi",
"recording": "Kaydediliyor",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Canlı akış etkinken mümkün değil...",
"recordingDisabledForGuestTooltip": "Misafirler kayıt etmeye başlayamaz.",
"recordingDisabledTooltip": "Kaydetmeye başlama devre dışı.",
"rejoinNow": "Tekrar katıl",
@@ -233,12 +255,17 @@
"reservationError": "Rezervasyon sistemi hatası",
"reservationErrorMsg": "Hata kodu: {{code}}, mesaj: {{msg}}",
"retry": "Yeniden Dene",
"screenSharingAudio": "Sesi paylaş",
"screenSharingFailedToInstall": "Hata! Ekran paylaşım uzantınız yüklenemedi.",
"screenSharingFailedToInstallTitle": "Ekran paylaşım uzantısı yüklenemedi",
"screenSharingFirefoxPermissionDeniedError": "Ekranınızı paylaşmaya çalışırken bir şeyler ters gitti. Lütfen bize izin verdiğinizden emin olun.",
"screenSharingFirefoxPermissionDeniedTitle": "Hata! Ekran paylaşımına başlayamadık!",
"screenSharingPermissionDeniedError": "Hata! Ekran paylaşma uzantısı izinlerinizle ilgili bir sorun oluştu. Lütfen yeniden yükleyin ve tekrar deneyin.",
"serviceUnavailable": "Hizmet kullanılamıyor",
"sendPrivateMessage": "Kısa süre önce özel bir mesaj aldınız. Buna özel olarak cevap vermek ister misiniz yoksa mesajınızı gruba göndermek mi istiyorsunuz?",
"sendPrivateMessageCancel": "Gruba gönder",
"sendPrivateMessageOk": "Özel olarak gönder",
"sendPrivateMessageTitle": "Özel olarak gönderilsin mi?",
"serviceUnavailable": "Hizmet kullanılamıyor",
"sessTerminated": "Arama sonlandırıldı",
"Share": "Paylaş",
"shareVideoLinkError": "Lütfen doğru bir Youtube bağlantısı sağlayın.",
@@ -261,7 +288,7 @@
"tokenAuthFailedTitle": "Kimlik doğrulama başarısız",
"transcribing": "Deşifre ediliyor",
"unlockRoom": "Toplantı parolasını kaldır",
"userPassword": "kullancı parolası",
"userPassword": "Kullancı parolası",
"WaitForHostMsg": "<b>{{room}}</b> toplantısı henüz başlamadı. Toplantı sahibi sizseniz, lütfen kimlik doğrulaması yapın. Değilseniz lütfen toplantı sahibinin gelmesini bekleyin.",
"WaitForHostMsgWOk": "<b>{{room}}</b> toplantısı henüz başlamadı. Toplantı sahibi sizseniz, kimlik doğrulaması için Tamam butonuna basın. Değilseniz lütfen toplantı sahibinin gelmesini bekleyin.",
"WaitingForHost": "Toplantı sahibi bekleniyor...",
@@ -271,6 +298,16 @@
"dialOut": {
"statusMessage": "şimdi {{status}}"
},
"documentSharing": {
"title": "Paylaşılan Döküman"
},
"e2ee": {
"labelToolTip": "Bu görüşmedeki ses ve video iletişimi uçtan uca şifrelenmiştir."
},
"feedback": {
"average": "Orta",
"bad": "Kötü",
@@ -329,10 +366,10 @@
"msg": "Biraz tökezledik.",
"retry": "Tekrar dene",
"support": "Destek",
"supportMsg": "Bu olmaya devam ederse, ulaşın"
"supportMsg": "Bu olmaya devam ederse, ulaşın."
},
"keyboardShortcuts": {
"focusLocal": "Videoma odaklan",
"focusLocal": "Videoya odaklan",
"focusRemote": "Başka bir kişinin videosuna odaklan",
"fullScreen": "Tam ekran görüntüle veya çık",
"keyboardShortcuts": "Klavye kısayolları",
@@ -345,7 +382,9 @@
"toggleFilmstrip": "Video önizlemelerini göster veya gizle",
"toggleScreensharing": "Kamera ve ekran paylaşımı arasında geçiş yap",
"toggleShortcuts": "Klavye kısayollarını göster veya gizle",
"videoMute": "Kamerayı aç veya kapat"
"videoMute": "Kamerayı aç veya kapat",
"videoQuality": "Çağrı kalitesini yönetin"
},
"liveStreaming": {
"busy": "Akış kaynaklarını serbest bırakmaya çalışıyoruz. Lütfen birkaç dakika içinde tekrar deneyin.",
@@ -364,7 +403,9 @@
"getStreamKeyManually": "Canlı akış alınamadı. Canlı akış anahtarınızı Youtube'dan almayı deneyin.",
"invalidStreamKey": "Canlı akış anahtarı yanlış olabilir.",
"off": "Canlı Akış durduruldu",
"offBy": "{{name}} canlı akışı durdurdu",
"on": "Canlı Akış",
"onBy": "{{name}} canlı akışı başlattı",
"pending": "Canlı Akış başlatılıyor...",
"serviceName": "Canlı Akış hizmeti",
"signedInAs": "Şu anda oturum açmış durumdasınız:",
@@ -373,7 +414,10 @@
"signOut": ıkış yap",
"start": "Bir canlı akış başlat",
"streamIdHelp": "Bu nedir?",
"unavailableTitle": "Canlı Akış kullanılamıyor"
"unavailableTitle": "Canlı Akış kullanılamıyor",
"youtubeTerms": "YouTube hizmet şartları",
"googlePrivacyPolicy": "Google Gizlilik Politikası"
},
"localRecording": {
"clientState": {
@@ -427,20 +471,61 @@
"mutedRemotelyDescription": "Konuşmaya hazır olduğun zaman, Kendi mikrofonunu açabilirsin. Görüşmeden gürültüyü uzak tutmak için kendini tekrar sessize almalısın.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) başka bir katılımcı tarafından kaldırıldı",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) başka bir katılımcı tarafından ayarlandı",
"raisedHand": "{{name}} konuşmak istiyor.",
"raisedHand": "{{name}} söz hakkı istiyor.",
"somebody": "Birisi",
"startSilentTitle": "Ses çıkışı olmadan bağlandınız",
"startSilentDescription": "Ses çıkışını açtıktan sonra tekrar bağlanın",
"suboptimalExperienceDescription": "Mmm... {{appName}} ile olan deneyiminizin burada çok iyi olmayacağından korkuyoruz. Bunu iyileştirmenin yollarını arıyoruz, ancak o zamana kadar lütfen şunlardan birini deneyin: <a href='{{recommendedBrowserPageLink}}' target='_blank'>desteklenen tarayıcılar</a>.",
"suboptimalBrowserWarning": "Toplantı deneyiminizin burada çok iyi olmayacağından korkuyoruz. Bunu iyileştirmenin yollarını arıyoruz, ancak o zamana kadar lütfen şunlardan birini deneyin: <a href='{{recommendedBrowserPageLink}}' target='_blank'>desteklenen tarayıcılar</a>.",
"suboptimalExperienceTitle": "Tarayıcı Uyarısı",
"unmute": "Sessizden çıkar",
"newDeviceCameraTitle": "Yeni kamera algılandı",
"newDeviceAudioTitle": "Yeni ses aygıtı algılandı",
"newDeviceAction": "Kullan"
"newDeviceAction": "Kullan",
"OldElectronAPPTitle": "Güvenlik açığı!",
"oldElectronClientDescription1": "Güvenlik açıkları bilinen Jitsi Meet istemcisinin eski bir sürümünü kullanıyor görünüyorsunuz. Lütfen güncellediğinizden emin olun.",
"oldElectronClientDescription2": "son yapı",
"oldElectronClientDescription3": " şimdi!"
},
"passwordSetRemotely": "başka katılımcı tarafından ayarlandı",
"passwordDigitsOnly": "{{number}} rakama kadar",
"poweredby": "gücünün kaynağı",
"poweredby": "",
"prejoin": {
"audioAndVideoError": "Ses ve video hatası:",
"audioOnlyError": "Ses Hatası:",
"audioTrackError": "Ses parçası oluşturulamadı.",
"callMe": "Beni ara",
"callMeAtNumber": "Beni şu numaradan arayın:",
"configuringDevices": "Cihazlar yapılandırılıyor...",
"connectedWithAudioQ": "Sese bağlı mısınız?",
"copyAndShare": "Toplantı bağlantısını kopyala ve paylaş",
"dialInMeeting": "Toplantıya telefon et",
"dialInPin": "Toplantıya telefon edin ve PIN kodunu girin:",
"dialing": "Arama",
"doNotShow": "Bunu bir daha gösterme",
"errorDialOut": "Dışarı arama yapılamadı",
"errorDialOutDisconnected": "Dışarı arama yapılamadı. Bağlantı kesildi",
"errorDialOutFailed": "Dışarı arama yapılamadı. Arama başarısız",
"errorDialOutStatus": "Dışarı arama durumu alınırken hata oluştu",
"errorStatusCode": "Dışarı arama hatası, durum kodu: {{status}}",
"errorValidation": "Numara doğrulanamadı",
"iWantToDialIn": "İçeri arama yapmak istiyorum",
"joinAudioByPhone": "Join with phone audio",
"joinMeeting": "Toplantıya katıl",
"joinWithoutAudio": "Ses olmadan katıl",
"initiated": "Çağrı başlatıldı",
"linkCopied": "Bağlantı panoya kopyalandı",
"lookGood": "Mikrofonunuz düzgün çalışıyor gibi görünüyor",
"or": "veya",
"calling": "Arama",
"startWithPhone": "Telefon sesiyle başlayın",
"screenSharingError": "Ekran paylaşma hatası:",
"videoOnlyError": "Video hatası:",
"videoTrackError": "Video izleme oluşturulamadı.",
"viewAllNumbers": "tüm numaraları görüntüle"
},
"presenceStatus": {
"busy": "Meşgul",
"calling": "Arıyor...",
@@ -461,7 +546,10 @@
"setEmailLabel": "Gravatar e-postanızı ayarlayın",
"title": "Profil"
},
"raisedHand": "Konuşmak ister misiniz?",
"recording": {
"limitNotificationDescriptionWeb": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <3>{{app}}</3>.",
"authDropboxText": "Dropbox'a yükle",
"availableSpace": "Kullanılabilir alan: {{spaceLeft}} MB (yaklaşık {{duration}} dakika kayıt)",
"beta": "BETA",
@@ -489,6 +577,13 @@
"sectionList": {
"pullToRefresh": "Yenilemek için çekin"
},
"security": {
"about": "Toplantınıza bir şifre ekleyebilirsiniz. Katılımcıların toplantıya katılmasına izin verilmeden önce şifreyi girmeleri gerekecektir.",
"insecureRoomNameWarning": "Toplantı odası güvenli değil. Konferansınıza istenmeyen katılımcılar katılabilir.",
"securityOptions": "Güvenlik Seçenekleri"
},
"settings": {
"calendar": {
"about": "{{appName}} takvim entegrasyonu, yaklaşan etkinlikleri okuyabilmesi için takviminize güvenli bir şekilde erişmek için kullanılır.",
@@ -513,16 +608,23 @@
"title": "Ayarlar"
},
"settingsView": {
"advanced": "Gelişmiş",
"alertOk": "Tamam",
"alertCancel": "İptal",
"alertTitle": "Uyarı",
"alertURLText": "Girilen sunucu bağlantısı geçersiz",
"buildInfoSection": "Yapı Bilgisi",
"conferenceSection": "Toplantı",
"disableCallIntegration": "Yerel arama entegrasyonunu devre dışı bırak",
"disableP2P": "Peer-To-Peer modunu devre dışı bırak",
"disableCrashReporting": "Çökme raporlamasını devre dışı bırak",
"disableCrashReportingWarning": "Kilitlenme raporlamasını devre dışı bırakmak istediğinizden emin misiniz? Ayar, uygulamayı yeniden başlattıktan sonra uygulanacaktır.",
"displayName": "Görünür ad",
"email": "E-posta",
"header": "Ayarlar",
"profileSection": "Profil",
"serverURL": "Sunucu Bağlantısı",
"showAdvanced": "Gelişmiş ayarları göster",
"startWithAudioMuted": "Ses kapalı başla",
"startWithVideoMuted": "Görüntü kapalı başla",
"version": "Versiyon"
@@ -557,17 +659,23 @@
"cc": "Altyazıları aç/kapat",
"chat": "Mesajlaşma penceresini aç/kapat",
"document": "Paylaşılan dokümanı aç/kapat",
"download": "Uygulamalarımızı indirin",
"e2ee": "Uçtan uca şifreleme",
"feedback": "Geri bildirim bırakın",
"fullScreen": "Tam ekranı aç/kapat",
"hangup": "Aramadan ayrıl",
"help": "Yardım",
"invite": "İnsanları davet et",
"kick": "Katılımcı çıkar",
"lobbyButton": "Lobi modunu etkinleştir / devre dışı bırak",
"localRecording": "Kayıt denetimlerini aç/kapat",
"lockRoom": "Toplantı parolasını aç/kapat",
"moreActions": "Diğer işlemler menüsünü aç/kapat",
"moreActionsMenu": "Diğer işlemler menüsü",
"mute": "Sesi aç/kapat",
"muteEveryone": "Herkesi sustur",
"pip": "Resim içinde Resim modunu aç/kapat",
"privateMessage": "Özel mesaj gönder",
"profile": "Profilinizi düzenleyin",
"raiseHand": "El kaldırmayı aç/kapat",
"recording": "Kaydetmeyi aç/kapat",
@@ -594,20 +702,35 @@
"closeChat": "Mesajlaşmayı kapat",
"documentClose": "Paylaşılan dokümanı kapat",
"documentOpen": "Paylaşılan dokümanı aç",
"download": "Uygulamalarımızı indirin",
"e2ee": "Uçtan uca şifreleme",
"enterFullScreen": "Tam ekran görüntüle",
"enterTileView": "Döşeme görünümüne geç",
"exitFullScreen": "Tam ekrandan çık",
"exitTileView": "Döşeme görünümünden çık",
"feedback": "Geri bildirim bırakın",
"hangup": "Ayrıl",
"help": "Yardım",
"invite": "Kişi davet et",
"lobbyButtonDisable": "Lobi modunu devre dışı bırak",
"lobbyButtonEnable": "Lobi modunu devre aktifleştir",
"login": "Oturum aç",
"logout": "Oturum kapat",
"lowerYourHand": "Elinizi indirin",
"moreActions": "Daha fazla işlem",
"moreOptions": "Daha fazla seçenek",
"mute": "Sessiz / Sesli",
"muteEveryone": "Mute everyone",
"noAudioSignalTitle": "Mikrofonunuzdan hiçbir giriş gelmiyor!",
"noAudioSignalDesc": "Sistem ayarlarından veya donanımdan sesi kapatmadıysanız, cihazınızı değiştirin.",
"noAudioSignalDescSuggestion": "Sistem ayarlarından veya donanımdan kasıtlı olarak kapatmadıysanız, önerilen aygıta geçmeyi düşünün.",
"noAudioSignalDialInDesc": "",
"noAudioSignalDialInLinkDesc": "İçeri arama numaraları",
"noisyAudioInputTitle": "Mikrofonunuz gürültülü görünüyor!",
"noisyAudioInputDesc": "Mikrofonunuz gürültü yapıyor gibi görünüyor, lütfen cihazı kapatmayı veya değiştirmeyi düşünün.",
"openChat": "Mesajlaşmayı aç",
"pip": "Resim içinde Resim moduna gir",
"privateMessage": "Özel mesajgönder",
"profile": "Profilinizi düzenleyin",
"raiseHand": "Elinizi kaldırın/indirin",
"raiseYourHand": "Elinizi kaldırın",
@@ -671,21 +794,24 @@
"labelTooiltipNoVideo": "Görüntü yok",
"labelTooltipAudioOnly": "Yalnızca ses modu etkin",
"ld": "LD",
"ldTooltip": "Düşük çözünürlüklü video görüntüleme",
"lowDefinition": "Düşük çözünürlük",
"onlyAudioAvailable": "Yalnızca ses kullanılabilir",
"onlyAudioSupported": "Bu tarayıcıda yalnızca sesi destekliyoruz.",
"sd": "SD",
"sdTooltip": "Standart çözünürlüklü video görüntüleme",
"standardDefinition": "Standart çözünürlük"
},
"videothumbnail": {
"domute": "Sustur",
"domuteOthers": "Diğer herkesi sustur",
"flip": "Döndür",
"kick": ıkarıldı",
"moderator": "Yönetici",
"mute": "Katılımcı sessiz",
"muted": "Sessiz",
"remoteControl": "Uzaktan kontrol",
"show": "",
"show": "Sahnede göster",
"videomute": "Katılımcı kamerayı durdurdu"
},
"welcomepage": {
@@ -702,6 +828,9 @@
"connectCalendarButton": "Takviminizi bağlayın",
"connectCalendarText": "",
"enterRoomTitle": "Yeni bir toplantı başlat",
"getHelp": "Yardım alın",
"roomNameAllowedChars": "Toplantı adı şu karakterlerden hiçbirini içermemelidir: ?, &, :, ', \", %, #.",
"go": "GİT",
"join": "KATIL",
"info": "Bilgi",
@@ -714,13 +843,52 @@
"roomnameHint": "Katılmak istediğiniz odanın adını veya bağlantısını girin. İstediğiniz oda adını uydurabilirsiniz. Aynı odada buluşmak için görüşmek istediğiniz kişilere bunu iletmeniz yeterli.",
"sendFeedback": "Geri bildirim gönder",
"terms": "Kurallar",
"title": "Güvenli, tüm özelliklere erişimli ve tamamen ücretsiz görüntülü arama",
"getHelp": "Yardım alın"
"title": "Güvenli, tüm özelliklere erişimli ve tamamen ücretsiz görüntülü arama"
},
"lonelyMeetingExperience": {
"button": "Birilerini davet et",
"youAreAlone": "Toplantıdaki tek kişisiniz"
},
"helpView": {
"header": "Yardım Merkezi"
},
"defaultNickname": "örnek Jane Pink",
"chromeExtensionBanner": {
"dontShowAgain": "Bunu bir daha gösterme",
"buttonText": "Chrome Eklentisi'ni indirin",
"installExtensionText": "Google Takvim ve Office 365 entegrasyonu için uzantıyı yükleyin"
},
"lobby": {
"allow": "İzin ver",
"backToKnockModeButton": "Şifre yok, bunun yerine katılmayı isteyin",
"dialogTitle": "Lobi modu",
"disableDialogContent": "Lobi modu şu anda etkin. Bu özellik, istenmeyen katılımcıların toplantınıza katılamamasını sağlar. Devre dışı bırakmak istiyor musunuz?",
"disableDialogSubmit": "Devre Dışı",
"emailField": "E-posta adresinizi giriniz",
"enableDialogPasswordField": "Şifre belirleyin (isteğe bağlı)",
"enableDialogSubmit": "Etkin",
"enableDialogText": "Lobi modu, toplantınızı yalnızca kişilerin bir moderatör tarafından resmi olarak onaylandıktan sonra girmelerine izin vererek korumanıza izin verir.",
"enterPasswordButton": "Toplantı şifresini girin",
"enterPasswordTitle": "Toplantıya katılmak için şifre girin",
"invalidPassword": "Geçersiz şifre",
"joiningMessage": "Birisi isteğinizi kabul eder etmez toplantıya katılacaksınız",
"joinWithPasswordMessage": "Şifre ile katılmaya çalışıyorsunuz lütfen bekleyin...",
"joinRejectedMessage": "Katılma isteğiniz bir moderatör tarafından reddedildi.",
"joinTitle": "Toplantıya katıl",
"joiningTitle": "Toplantıya katılma isteniyor...",
"joiningWithPasswordTitle": "Şifre ile katılıyor...",
"knockButton": "Katılmak için sor",
"knockTitle": "Birisi toplantıya katılmak istiyor",
"nameField": "Adınızı giriniz",
"passwordField": "Toplantı şifresini giriniz",
"passwordJoinButton": "Katıl",
"reject": "Reddet",
"toggleLabel": "Lobiyi etkinleştir"
}
}

View File

@@ -180,10 +180,8 @@
"dismiss": "Скасувати",
"displayNameRequired": "Вітання! Як вас звати?",
"done": "Готово",
"e2eeDescription": "<p>Наскрізне шифрування зараз в режимі<strong>ТЕСТУВАННЯ</strong>. Будь ласка, перегляньте <a href='https://jitsi.org/blog/e2ee/' target='_blank'>цю публікацію</a> для докладної інформації.</p><br/><p>Зверніть увагу, що увімкнення наскрізного шифрування призведе до вимкнення таких служб на стороні сервера: запису, живої трансляції запису в онлайні та участі у конференції за допомогою вхідного телефонного дзвінка. Також, просимо звернути увагу, що приєднання до зустрічі в такому разі буде можливе лише з браузера, який має підтримувати потоки зі вставкою (insertable streams).</p>",
"e2eeLabel": "Ключ",
"e2eeTitle": "Наскрізне шифрування",
"e2eeWarning": "<br /><p><strong>УВАГА:</strong> Схоже, що не всі учасники цієї зустрічі мають підтримку технології наскрізного шифрування. Якщо ви увімкнете цю функцію, то вони не зможуть ані чути, ані бачити вас.</p>",
"e2eeDescription": "Наскрізне шифрування зараз в режимі ТЕСТУВАННЯ. Зверніть увагу, що увімкнення наскрізного шифрування призведе до вимкнення таких служб на стороні сервера: запису, живої трансляції запису в онлайні та участі у конференції за допомогою вхідного телефонного дзвінка. Також, просимо звернути увагу, що приєднання до зустрічі в такому разі буде можливе лише з браузера, який має підтримувати потоки зі вставкою (insertable streams).",
"e2eeWarning": "УВАГА: Схоже, що не всі учасники цієї зустрічі мають підтримку технології наскрізного шифрування. Якщо ви увімкнете цю функцію, то вони не зможуть ані чути, ані бачити вас.",
"enterDisplayName": "Будь ласка, зазначте ваше ім'я",
"error": "Помилка",
"externalInstallationMsg": "Вам потрібно встановити наше розширення для спільного доступу до стільниці.",

View File

@@ -102,6 +102,7 @@
"bandwidth": "Estimated bandwidth:",
"bitrate": "Bitrate:",
"bridgeCount": "Server count: ",
"codecs": "Codecs (A/V): ",
"connectedTo": "Connected to:",
"e2e_rtt": "E2E RTT:",
"framerate": "Frame rate:",
@@ -110,6 +111,7 @@
"localaddress_plural": "Local addresses:",
"localport": "Local port:",
"localport_plural": "Local ports:",
"maxEnabledResolution": "send max",
"more": "Show more",
"packetloss": "Packet loss:",
"quality": {
@@ -189,25 +191,25 @@
"connectErrorWithMsg": "Oops! Something went wrong and we couldn't connect to the conference: {{msg}}",
"connecting": "Connecting",
"contactSupport": "Contact support",
"copied": "Copied",
"copy": "Copy",
"dismiss": "Dismiss",
"displayNameRequired": "Hi! Whats your name?",
"done": "Done",
"e2eeDescription": "<p>End-to-End Encryption is currently <strong>EXPERIMENTAL</strong>. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details.</p><br/><p>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.</p>",
"e2eeLabel": "Key",
"e2eeTitle": "End-to-End Encryption",
"e2eeWarning": "<br /><p><strong>WARNING:</strong> 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.</p>",
"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.",
"e2eeLabel": "E2EE key",
"e2eeNoKey": "None",
"e2eeToggleSet": "Set key",
"e2eeSet": "Set",
"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",
"error": "Error",
"externalInstallationMsg": "You need to install our desktop sharing extension.",
"externalInstallationTitle": "Extension required",
"goToStore": "Go to the webstore",
"gracefulShutdown": "Our service is currently down for maintenance. Please try again later.",
"grantModeratorDialog": "Are you sure you want to make this participant a moderator?",
"grantModeratorTitle": "Grant moderator",
"IamHost": "I am the host",
"incorrectRoomLockPassword": "Incorrect password",
"incorrectPassword": "Incorrect username or password",
"inlineInstallationMsg": "You need to install our desktop sharing extension.",
"inlineInstallExtension": "Install now",
"internalError": "Oops! Something went wrong. The following error occurred: {{error}}",
"internalErrorTitle": "Internal error",
"kickMessage": "You can contact {{participantDisplayName}} for more details.",
@@ -249,6 +251,7 @@
"passwordRequired": "$t(lockRoomPasswordUppercase) required",
"popupError": "Your browser is blocking pop-up windows from this site. Please enable pop-ups in your browser's security settings and try again.",
"popupErrorTitle": "Pop-up blocked",
"readMore": "more",
"recording": "Recording",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
"recordingDisabledForGuestTooltip": "Guests can't start recordings.",
@@ -269,11 +272,9 @@
"reservationErrorMsg": "Error code: {{code}}, message: {{msg}}",
"retry": "Retry",
"screenSharingAudio": "Share audio",
"screenSharingFailedToInstall": "Oops! Your screen sharing extension failed to install.",
"screenSharingFailedToInstallTitle": "Screen sharing extension failed to install",
"screenSharingFirefoxPermissionDeniedError": "Something went wrong while we were trying to share your screen. Please make sure that you have given us permission to do so.",
"screenSharingFirefoxPermissionDeniedTitle": "Oops! We werent able to start screen sharing!",
"screenSharingPermissionDeniedError": "Oops! Something went wrong with your screen sharing extension permissions. Please reload and try again.",
"screenSharingFailed": "Oops! Something went wrong, we werent able to start screen sharing!",
"screenSharingFailedTitle": "Screen sharing failed!",
"screenSharingPermissionDeniedError": "Oops! Something went wrong with your screen sharing permissions. Please reload and try again.",
"sendPrivateMessage": "You recently received a private message. Did you intend to reply to that privately, or you want to send your message to the group?",
"sendPrivateMessageCancel": "Send to the group",
"sendPrivateMessageOk": "Send privately",
@@ -317,6 +318,9 @@
"e2ee": {
"labelToolTip": "Audio and Video Communication on this call is end-to-end encrypted"
},
"embedMeeting": {
"title": "Embed this meeting"
},
"feedback": {
"average": "Average",
"bad": "Bad",
@@ -500,12 +504,33 @@
"poweredby": "powered by",
"prejoin": {
"audioAndVideoError": "Audio and video error:",
"audioDeviceProblem": "There is a problem with your audio device",
"audioOnlyError": "Audio error:",
"audioTrackError": "Could not create audio track.",
"calling": "Calling",
"callMe": "Call me",
"callMeAtNumber": "Call me at this number:",
"configuringDevices": "Configuring devices...",
"connectedWithAudioQ": "Youre connected with audio?",
"connection": {
"good": "Your internet connection looks good!",
"nonOptimal": "Your internet connection is not optimal",
"poor": "You have a poor internet connection"
},
"connectionDetails": {
"audioClipping": "We expect your audio to be clipped.",
"audioHighQuality": "We expect your audio to have excellent quality.",
"audioLowNoVideo": "We expect your audio quality to be low and no video.",
"goodQuality": "Awesome! Your media quality is going to be great.",
"noMediaConnectivity": "We could not find a way to establish media connectivity for this test. This is typically caused by a firewall or NAT.",
"noVideo": "We expect that your video will be terrible.",
"undetectable": "If you still can not make calls in browser, we recommend that you make sure your speakers, microphone and camera are properly set up, that you have granted your browser rights to use your microphone and camera, and that your browser version is up-to-date. If you still have trouble calling, you should contact the web application developer.",
"veryPoorConnection": "We expect your call quality to be really terrible.",
"videoFreezing": "We expect your video to freeze, turn black, and be pixelated.",
"videoHighQuality": "We expect your video to have good quality.",
"videoLowQuality": "We expect your video to have low quality in terms of frame rate and resolution.",
"videoTearing": "We expect your video to be pixelated or have visual artefacts."
},
"copyAndShare": "Copy & share meeting link",
"dialInMeeting": "Dial into the meeting",
"dialInPin": "Dial into the meeting and enter PIN code:",
@@ -515,6 +540,7 @@
"errorDialOutDisconnected": "Could not dial out. Disconnected",
"errorDialOutFailed": "Could not dial out. Call failed",
"errorDialOutStatus": "Error getting dial out status",
"errorMissingName": "Please enter your name to join the meeting",
"errorStatusCode": "Error dialing out, status code: {{status}}",
"errorValidation": "Number validation failed",
"iWantToDialIn": "I want to dial in",
@@ -525,7 +551,8 @@
"linkCopied": "Link copied to clipboard",
"lookGood": "It sounds like your microphone is working properly",
"or": "or",
"calling": "Calling",
"premeeting": "Pre meeting",
"showScreen": "Enable pre meeting screen",
"startWithPhone": "Start with phone audio",
"screenSharingError": "Screen sharing error:",
"videoOnlyError": "Video error:",
@@ -586,8 +613,9 @@
"pullToRefresh": "Pull to refresh"
},
"security": {
"about": "You can add a passcode to your meeting. Participants will need to provide the passcode before they are allowed to join the meeting.",
"insecureRoomNameWarning": "The room name is insecure. Unwanted participants may join your conference.",
"about": "You can add a $t(lockRoomPassword) to your meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.",
"aboutReadOnly": "Moderator participants can add a $t(lockRoomPassword) to the meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.",
"insecureRoomNameWarning": "The room name is unsafe. Unwanted participants may join your conference. Consider securing your meeting using the security button.",
"securityOptions": "Security options"
},
"settings": {
@@ -668,9 +696,11 @@
"chat": "Toggle chat window",
"document": "Toggle shared document",
"download": "Download our apps",
"embedMeeting": "Embed meeting",
"e2ee": "End-to-End Encryption",
"feedback": "Leave feedback",
"fullScreen": "Toggle full screen",
"grantModerator": "Grant Moderator",
"hangup": "Leave the call",
"help": "Help",
"invite": "Invite people",
@@ -715,6 +745,7 @@
"documentOpen": "Open shared document",
"download": "Download our apps",
"e2ee": "End-to-End Encryption",
"embedMeeting": "Embed meeting",
"enterFullScreen": "View full screen",
"enterTileView": "Enter tile view",
"exitFullScreen": "Exit full screen",
@@ -819,6 +850,7 @@
"domute": "Mute",
"domuteOthers": "Mute everyone else",
"flip": "Flip",
"grantModerator": "Grant Moderator",
"kick": "Kick out",
"moderator": "Moderator",
"mute": "Participant is muted",
@@ -842,16 +874,17 @@
"connectCalendarText": "Connect your calendar to view all your meetings in {{app}}. Plus, add {{provider}} meetings to your calendar and start them with one click.",
"enterRoomTitle": "Start a new meeting",
"getHelp": "Get help",
"roomNameAllowedChars": "Meeting name should not contain any of these characters: ?, &, :, ', \", %, #.",
"go": "GO",
"goSmall": "GO",
"join": "CREATE / JOIN",
"info": "Info",
"join": "CREATE / JOIN",
"moderatedMessage": "Or <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">book a meeting URL</a> in advance where you are the only moderator.",
"privacy": "Privacy",
"recentList": "Recent",
"recentListDelete": "Delete",
"recentListEmpty": "Your recent list is currently empty. Chat with your team and you will find all your recent meetings here.",
"reducedUIText": "Welcome to {{app}}!",
"roomNameAllowedChars": "Meeting name should not contain any of these characters: ?, &, :, ', \", %, #.",
"roomname": "Enter room name",
"roomnameHint": "Enter the name or URL of the room you want to join. You may make a name up, just let the people you are meeting know it so that they enter the same name.",
"sendFeedback": "Send feedback",
@@ -866,6 +899,7 @@
"header": "Help center"
},
"lobby": {
"knockingParticipantList": "Knocking participant list",
"allow": "Allow",
"backToKnockModeButton": "No password, ask to join instead",
"dialogTitle": "Lobby mode",
@@ -887,6 +921,11 @@
"knockButton": "Ask to Join",
"knockTitle": "Someone wants to join the meeting",
"nameField": "Enter your name",
"notificationLobbyAccessDenied": "{{targetParticipantName}} has been rejected to join by {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} has been allowed to join by {{originParticipantName}}",
"notificationLobbyDisabled": "Lobby has been disabled by {{originParticipantName}}",
"notificationLobbyEnabled": "Lobby has been enabled by {{originParticipantName}}",
"notificationTitle": "Lobby",
"passwordField": "Enter meeting password",
"passwordJoinButton": "Join",
"reject": "Reject",

View File

@@ -21,6 +21,7 @@ import {
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';
import { setE2EEKey } from '../../react/features/e2ee';
import { invite } from '../../react/features/invite';
import { toggleLobbyMode } from '../../react/features/lobby/actions.web';
import { RECORDING_TYPES } from '../../react/features/recording/constants';
import { getActiveSession } from '../../react/features/recording/functions';
import { muteAllParticipants } from '../../react/features/remote-video-menu/actions';
@@ -89,6 +90,9 @@ function initCommands() {
APP.store.dispatch(muteAllParticipants(localIds));
},
'toggle-lobby': isLobbyEnabled => {
APP.store.dispatch(toggleLobbyMode(isLobbyEnabled));
},
'password': password => {
const { conference, passwordRequired }
= APP.store.getState()['features/base/conference'];
@@ -368,6 +372,9 @@ function initCommands() {
case 'is-video-available':
callback(videoAvailable);
break;
case 'is-sharing-screen':
callback(Boolean(APP.conference.isSharingScreen));
break;
default:
return false;
}
@@ -517,6 +524,19 @@ class API {
});
}
/**
* Notify external application that the video quality setting has changed.
*
* @param {number} videoQuality - The video quality. The number represents the maximum height of the video streams.
* @returns {void}
*/
notifyVideoQualityChanged(videoQuality: number) {
this._sendEvent({
name: 'video-quality-changed',
videoQuality
});
}
/**
* Notify external application (if API is enabled) that message was
* received.

View File

@@ -31,6 +31,7 @@ const commands = {
displayName: 'display-name',
e2eeKey: 'e2ee-key',
email: 'email',
toggleLobby: 'toggle-lobby',
hangup: 'video-hangup',
muteEveryone: 'mute-everyone',
password: 'password',
@@ -79,6 +80,7 @@ const events = {
'video-conference-left': 'videoConferenceLeft',
'video-availability-changed': 'videoAvailabilityChanged',
'video-mute-status-changed': 'videoMuteStatusChanged',
'video-quality-changed': 'videoQualityChanged',
'screen-sharing-status-changed': 'screenSharingStatusChanged',
'dominant-speaker-changed': 'dominantSpeakerChanged',
'subject-change': 'subjectChange',
@@ -277,6 +279,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
this._transport = new Transport({
backend: new PostMessageTransportBackend({
postisOptions: {
allowedOrigin: new URL(this._url).origin,
scope: `jitsi_meet_external_api_${id}`,
window: this._frame.contentWindow
}
@@ -501,6 +504,9 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
changeParticipantNumber(this, -1);
delete this._participants[this._myUserID];
break;
case 'video-quality-changed':
this._videoQuality = data.videoQuality;
break;
}
const eventName = events[name];
@@ -687,6 +693,15 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
return getCurrentDevices(this._transport);
}
/**
* Returns the current video quality setting.
*
* @returns {number}
*/
getVideoQuality() {
return this._videoQuality;
}
/**
* Check if the audio is available.
*
@@ -760,6 +775,17 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
});
}
/**
* Returns screen sharing status.
*
* @returns {Promise} - Resolves with screensharing status and rejects on failure.
*/
isSharingScreen() {
return this._transport.sendRequest({
name: 'is-sharing-screen'
});
}
/**
* Returns the avatar URL of a participant.
*

View File

@@ -6,6 +6,7 @@ const UI = {};
import EventEmitter from 'events';
import Logger from 'jitsi-meet-logger';
import { isMobileBrowser } from '../../react/features/base/environment/utils';
import { getLocalParticipant } from '../../react/features/base/participants';
import { toggleChat } from '../../react/features/chat';
import { setDocumentUrl } from '../../react/features/etherpad';
@@ -15,7 +16,7 @@ import {
dockToolbox,
setToolboxEnabled,
showToolbox
} from '../../react/features/toolbox';
} from '../../react/features/toolbox/actions.web';
import UIEvents from '../../service/UI/UIEvents';
import EtherpadManager from './etherpad/Etherpad';
@@ -154,6 +155,12 @@ UI.start = function() {
sharedVideoManager = new SharedVideoManager(eventEmitter);
if (isMobileBrowser()) {
$('body').addClass('mobile-browser');
} else {
$('body').addClass('desktop-browser');
}
if (interfaceConfig.filmStripOnly) {
$('body').addClass('filmstrip-only');
APP.store.dispatch(setNotificationsEnabled(false));
@@ -553,82 +560,6 @@ UI.getLargeVideo = function() {
return VideoLayout.getLargeVideo();
};
/**
* Shows "Please go to chrome webstore to install the desktop sharing extension"
* 2 button dialog with buttons - cancel and go to web store.
* @param url {string} the url of the extension.
*/
UI.showExtensionExternalInstallationDialog = function(url) {
let openedWindow = null;
const submitFunction = function(e, v) {
if (v) {
e.preventDefault();
if (openedWindow === null || openedWindow.closed) {
openedWindow
= window.open(
url,
'extension_store_window',
'resizable,scrollbars=yes,status=1');
} else {
openedWindow.focus();
}
}
};
const closeFunction = function(e, v) {
if (openedWindow) {
// Ideally we would close the popup, but this does not seem to work
// on Chrome. Leaving it uncommented in case it could work
// in some version.
openedWindow.close();
openedWindow = null;
}
if (!v) {
eventEmitter.emit(UIEvents.EXTERNAL_INSTALLATION_CANCELED);
}
};
messageHandler.openTwoButtonDialog({
titleKey: 'dialog.externalInstallationTitle',
msgKey: 'dialog.externalInstallationMsg',
leftButtonKey: 'dialog.goToStore',
submitFunction,
loadedFunction: $.noop,
closeFunction
});
};
/**
* Shows a dialog which asks user to install the extension. This one is
* displayed after installation is triggered from the script, but fails because
* it must be initiated by user gesture.
* @param callback {function} function to be executed after user clicks
* the install button - it should make another attempt to install the extension.
*/
UI.showExtensionInlineInstallationDialog = function(callback) {
const submitFunction = function(e, v) {
if (v) {
callback();
}
};
const closeFunction = function(e, v) {
if (!v) {
eventEmitter.emit(UIEvents.EXTERNAL_INSTALLATION_CANCELED);
}
};
messageHandler.openTwoButtonDialog({
titleKey: 'dialog.externalInstallationTitle',
msgKey: 'dialog.inlineInstallationMsg',
leftButtonKey: 'dialog.inlineInstallExtension',
submitFunction,
loadedFunction: $.noop,
closeFunction
});
};
/**
* Show shared video.
* @param {string} id the id of the sender of the command

View File

@@ -1,6 +1,6 @@
/* global $, APP, config */
import { toJid } from '../../../react/features/base/connection';
import { toJid } from '../../../react/features/base/connection/functions';
import {
JitsiConnectionErrors
} from '../../../react/features/base/lib-jitsi-meet';

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