Compare commits

...

199 Commits

Author SHA1 Message Date
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
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
Дамян Минков
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
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
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
Vlad Piersec
8758c222c6 feat(branding): Add ability to customize logo & background 2020-06-10 14:58:27 +02:00
Bettenbuk Zoltan
29dc63fbcb ref: merge prejoin with lobby 2020-06-09 18:10:43 +02:00
Bettenbuk Zoltan
475a2ae596 feat: lobby feature
The lobby feature adds the possibility to lock a meeting and only allow people in after virtually knocking and going through formal approval
2020-06-09 18:10:43 +02:00
dependabot[bot]
338c960215 build(deps): bump websocket-extensions from 0.1.3 to 0.1.4
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4.
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-09 10:09:02 +02:00
Jaya Allamsetty
e6093e0706 fix(UI): Highlight the audio device when we hover over it 2020-06-08 15:34:05 -04:00
Jaya Allamsetty
d1d968997e Disable audiosettings button on Firefox as it is not supported 2020-06-08 15:34:05 -04:00
Jaya Allamsetty
45570bc0e7 fix(device-selection): Update redux when a new speaker is selected
Update userSelectedAudioOutputDeviceId and userSelectedAudioOutputDeviceLabel when a new speaker is selected from the audio settings popup menu
2020-06-08 15:34:05 -04:00
Jaya Allamsetty
f4bcad02d8 fix(device-selection): Add a workaround for a chrome bug with default mic
Pass the real deviceId to gUM instead of 'default' for Chrome to return the correct media stream
2020-06-08 15:34:05 -04:00
khajaamin
26f7951894 Marathi language (#6615)
* Lang folder removed from proxy server and now using from local dev dir

* Added Marathi 100% langulage transalation
2020-06-08 12:33:40 -05:00
Richard Février
35dabb1a27 main-fr.json : remove duplicated key introduced by #6461 2020-06-08 12:13:36 -05:00
Murat Emir Cabaroğlu
c3b79802b2 add missing and fix wrong turkish translation 2020-06-08 11:17:28 -05:00
Дамян Минков
e6dbe65193 Moderated rooms or subdomains (#6959)
* fix: Fixes using token with no user context.

* feat(moderated): Adds option to add moderated rooms and subdomains.

When a user joins such room or subdomain in order to be a moderator needs to provide a valid jwt token for that room.

* squash: Renames function.

* ref: Removes filtering jicofo setting owners.

This will be disabled on jicofo side and will greatly simplify logic.
Also check the checks to avoid jwt for main domain to access subdomains and the other way around.

* fix: Skips allowners logic for admins.
2020-06-05 07:57:49 -05:00
Deepak Verma
ff23f81dfe flags: fix comment 2020-06-05 13:53:35 +02:00
Jaya Allamsetty
bc66c9063a chore(deps): update lib-jitsi-meet 2020-06-04 10:54:06 -04:00
Emil Ivov
974ef4a382 Merge pull request #6941 from jitsi/saghul-patch-5
shared-video: use a more recent video by default
2020-06-03 06:42:41 -05:00
Saúl Ibarra Corretgé
3bf82b573c shared-video: use a more recent video by default 2020-06-03 11:27:08 +02:00
hmuresan
b4b4339a1a external_api: add start/stop recording commands 2020-06-03 09:30:19 +02:00
Hristo Terezov
6773aed67f feat(recording): Limit notification 2020-06-02 16:00:54 -05:00
Saúl Ibarra Corretgé
d740752522 rn,responsive-ui: refactor dimensions detection
Use a dimensions detecting root component. The Dimensions module does not
measure the app's view size, but the Window, which may not be the same, for
example on iOS when PiP is used.

Also refactor the aspect ratio wrap component since it can be taken directly
from the store.

Last, remove the use of DimensionsDetector on LargeVideo and TileView since they
occupy the full-screen anyway.

Fixes PiP mode on iOS.
2020-06-02 16:54:28 +02:00
Marius Bardan
d93b219c7f lang: update RO translations 2020-06-02 10:19:06 +02:00
Marius Bardan
10cd150a07 lang: update RO translations 2020-06-02 10:19:06 +02:00
Jaya Allamsetty
a31f3c0c76 fix(config): Add missing capScreenshareBitrate to config.js 2020-05-29 14:04:30 -04:00
Simon Honegger
af39186a5f fix: typeof returns a string, so this condition was always true 2020-05-29 19:53:05 +02:00
Saúl Ibarra Corretgé
d4d1d0aa70 dev: add plugin for circular dependency detection
Example run: https://gist.github.com/saghul/e5e12edc108bdedbcbe65a3d7528235f
2020-05-29 10:37:09 +02:00
Saúl Ibarra Corretgé
3a88f4939c misc: break import cycle 2020-05-29 10:37:09 +02:00
Saúl Ibarra Corretgé
fe221fe4be deps: run npm audit fix 2020-05-29 10:37:09 +02:00
Jaya Allamsetty
1caaa47f5e chore(deps): update lib-jitsi-meet
fix(safari): Disable VAD processing on Safari - cfbb511bce
2020-05-28 17:19:07 -04:00
Hristo Terezov
a2c4d17e4d fix(record):web/mobile match disable functionality 2020-05-28 15:39:49 -05:00
Hristo Terezov
ce1de9e1e7 feat(recording): Disable buttons on active session 2020-05-28 15:39:49 -05:00
Hristo Terezov
3e7abf3da0 feat(subtitles): Disable for guests. 2020-05-28 13:43:18 -05:00
damencho
8b4f1789a6 chore(deps): Update lib-jitsi-meet, callstats using full URL. 2020-05-28 11:15:33 -05:00
Gabriel Imre
444e2b90df callstats: add siteID passing; sanitize confID path 2020-05-28 10:00:45 -05:00
Saúl Ibarra Corretgé
7de88995a5 labels: don't disable all labels when VIDEO_QUALITY_LABEL_DISABLED is set
Fixes: https://github.com/jitsi/jitsi-meet/issues/6880
2020-05-28 10:15:52 +02:00
Hristo Terezov
f0c6e934ce feat(config):InsecureRoomNameWarning config option 2020-05-27 18:03:15 -05:00
Дамян Минков
78b01d2c97 Adding whitelist and move away from using custom field for password. (#6621)
* Adding whitelist and move away from using custom field for password.

We re-use room lock for lobby password.

* Make sure we do not run muc-occupant-pre-join for non members only rooms.

* Destroying lobby room, when main room is destroyed or membersonly is disabled.

* Adds destroy reason.

* Clears lobby room instance on destroy.

Fixes problem with on/off/on of lobby feature.

* Add lobby room jid only when members only is on.

* Sends main room jid on lobby destroy.

We can use that in client loggic to auto-join lobby participants to main room as lobby is disabled while waiting.

* fix: Fixes using is_healthcheck_room.

* squash: Enables lobby rooms feature by default.

* chore(deps): Update lib-jitsi-meet, to enable lobby rooms.
2020-05-27 18:01:41 -05:00
Saúl Ibarra Corretgé
bf60be1654 style: fixup needlessly wrapped line 2020-05-27 16:45:11 +02:00
Saúl Ibarra Corretgé
5202a7e5b8 room-lock: use the proper text for the room lock prompt 2020-05-27 16:45:11 +02:00
Saúl Ibarra Corretgé
2af0c0ba17 rn: bump SDK version to 2.9.0 2020-05-27 15:35:58 +02:00
Saúl Ibarra Corretgé
fbb6486b5f deps: update react-native-watch-connectivity
It's back in active development and fixes a warning in iOS.
2020-05-27 15:35:58 +02:00
Saúl Ibarra Corretgé
a113151563 deps: update react-native-calendar-events
Rebase our patches (in PR) on top of latest master.

Sshould fix a crash when requesting permisssions.
2020-05-27 15:35:58 +02:00
Raider700
470fda3467 lang: add missing fields to German translation 2020-05-27 11:48:51 +02:00
Saúl Ibarra Corretgé
edea6316ab Update config.js 2020-05-27 08:43:48 +02:00
Saúl Ibarra Corretgé
adac9ee5f8 config: don't enable H.264 by default on P2P
We are not actively testing it and it currently crashes Chrome 83+ when insertable streams are used.
2020-05-27 08:43:48 +02:00
Saúl Ibarra Corretgé
af8bd876e6 deps: run npm audit fix
Skipped webpack, requires further investigation.
2020-05-27 00:16:20 +02:00
470 changed files with 14041 additions and 7001 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
-->

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

@@ -74,7 +74,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 +82,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

@@ -7,6 +7,9 @@
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,15 @@
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 +37,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 +55,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
//
@@ -85,16 +113,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

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

@@ -21,4 +21,4 @@ android.useAndroidX=true
android.enableJetifier=true
appVersion=20.3.0
sdkVersion=2.8.2
sdkVersion=2.9.0

View File

@@ -22,7 +22,6 @@ import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import com.calendarevents.CalendarEventsPackage;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactContext;
@@ -167,13 +166,7 @@ public class JitsiMeetActivityDelegate {
}
public static void onRequestPermissionsResult(
final int requestCode,
final String[] permissions,
final int[] grantResults) {
CalendarEventsPackage.onRequestPermissionsResult(
requestCode,
permissions,
grantResults);
final int requestCode, final String[] permissions, final int[] grantResults) {
permissionsCallback = new Callback() {
@Override
public void invoke(Object... args) {

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,
@@ -48,6 +48,7 @@ import {
import {
checkAndNotifyForNewDevice,
getAvailableDevices,
getDefaultDeviceId,
notifyCameraError,
notifyMicError,
setAudioOutputDeviceId,
@@ -94,6 +95,8 @@ import {
createLocalPresenterTrack,
createLocalTracksF,
destroyLocalTracks,
getLocalJitsiAudioTrack,
getLocalJitsiVideoTrack,
isLocalVideoTrackMuted,
isLocalTrackMuted,
isUserInteractionRequiredForUnmute,
@@ -101,7 +104,10 @@ import {
trackAdded,
trackRemoved
} from './react/features/base/tracks';
import { getJitsiMeetGlobalNS } from './react/features/base/util';
import {
getBackendSafePath,
getJitsiMeetGlobalNS
} from './react/features/base/util';
import { showDesktopPicker } from './react/features/desktop-picker';
import { appendSuffix } from './react/features/display-name';
import { setE2EEKey } from './react/features/e2ee';
@@ -115,9 +121,7 @@ import { suspendDetected } from './react/features/power-monitor';
import {
initPrejoin,
isPrejoinPageEnabled,
isPrejoinPageVisible,
replacePrejoinAudioTrack,
replacePrejoinVideoTrack
isPrejoinPageVisible
} from './react/features/prejoin';
import { createRnnoiseProcessorPromise } from './react/features/rnnoise';
import { toggleScreenshotCaptureEffect } from './react/features/screenshot-capture';
@@ -292,12 +296,6 @@ class ConferenceConnector {
logger.error('CONFERENCE FAILED:', err, ...params);
switch (err) {
case JitsiConferenceErrors.CONNECTION_ERROR: {
const [ msg ] = params;
APP.UI.notifyConnectionFailed(msg);
break;
}
case JitsiConferenceErrors.NOT_ALLOWED_ERROR: {
// let's show some auth not allowed page
@@ -332,14 +330,6 @@ class ConferenceConnector {
APP.UI.notifyGracefulShutdown();
break;
case JitsiConferenceErrors.CONFERENCE_DESTROYED: {
const [ reason ] = params;
APP.UI.hideStats();
APP.UI.notifyConferenceDestroyed(reason);
break;
}
// FIXME FOCUS_DISCONNECTED is a confusing event name.
// What really happens there is that the library is not ready yet,
// because Jicofo is not available, but it is going to give it another
@@ -421,6 +411,10 @@ function disconnect() {
return Promise.resolve();
};
if (!connection) {
return onDisconnected();
}
return connection.disconnect().then(onDisconnected, onDisconnected);
}
@@ -1258,7 +1252,7 @@ export default {
items[key] = param[1];
}
if (typeof items.e2eekey !== undefined) {
if (typeof items.e2eekey !== 'undefined') {
APP.store.dispatch(setE2EEKey(items.e2eekey));
// Clean URL in browser history.
@@ -1364,7 +1358,13 @@ export default {
const options = config;
const { email, name: nick } = getLocalParticipant(APP.store.getState());
const { locationURL } = APP.store.getState()['features/base/connection'];
const state = APP.store.getState();
const { locationURL } = state['features/base/connection'];
const { tenant } = state['features/base/jwt'];
if (tenant) {
options.siteID = tenant;
}
if (options.enableDisplayNameInStats && nick) {
options.statisticsDisplayName = nick;
@@ -1376,7 +1376,7 @@ export default {
options.applicationName = interfaceConfig.APP_NAME;
options.getWiFiStatsMethod = this._getWiFiStatsMethod;
options.confID = `${locationURL.host}${locationURL.pathname}`;
options.confID = `${locationURL.host}${getBackendSafePath(locationURL.pathname)}`;
options.createVADProcessor = createRnnoiseProcessorPromise;
// Disable CallStats, if requessted.
@@ -1407,31 +1407,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());
})
@@ -1472,28 +1473,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)
@@ -1673,8 +1675,6 @@ export default {
* @private
*/
_createDesktopTrack(options = {}) {
let externalInstallation = false;
let DSExternalInstallationInProgress = false;
const didHaveVideo = !this.isLocalVideoMuted();
const getDesktopStreamPromise = options.desktopStream
@@ -1683,43 +1683,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 => {
@@ -1743,15 +1707,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;
});
},
@@ -1955,70 +1912,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({
@@ -2425,11 +2348,20 @@ export default {
micDeviceId => {
const audioWasMuted = this.isLocalAudioMuted();
// When the 'default' mic needs to be selected, we need to
// pass the real device id to gUM instead of 'default' in order
// to get the correct MediaStreamTrack from chrome because of the
// following bug.
// https://bugs.chromium.org/p/chromium/issues/detail?id=997689
const hasDefaultMicChanged = micDeviceId === 'default';
sendAnalytics(createDeviceChangedEvent('audio', 'input'));
createLocalTracksF({
devices: [ 'audio' ],
cameraDeviceId: null,
micDeviceId
micDeviceId: hasDefaultMicChanged
? getDefaultDeviceId(APP.store.getState(), 'audioInput')
: micDeviceId
})
.then(([ stream ]) => {
// if audio was muted before changing the device, mute
@@ -2453,6 +2385,12 @@ export default {
return this.useAudioStream(stream);
})
.then(() => {
if (hasDefaultMicChanged) {
// workaround for the default device to be shown as selected in the
// settings even when the real device id was passed to gUM because of the
// above mentioned chrome bug.
this.localAudio._realDeviceId = this.localAudio.deviceId = 'default';
}
logger.log(`switched local audio device: ${this.localAudio?.getDeviceId()}`);
this._updateAudioDeviceId();
@@ -2506,6 +2444,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,
@@ -2513,7 +2453,8 @@ export default {
state,
time,
muted: isMuted,
volume
volume,
from: localParticipant.id
}
});
} else {
@@ -2754,11 +2695,20 @@ export default {
checkAndNotifyForNewDevice(newAvailDevices.videoInput, oldDevices.videoInput));
}
// When the 'default' mic needs to be selected, we need to
// pass the real device id to gUM instead of 'default' in order
// to get the correct MediaStreamTrack from chrome because of the
// following bug.
// https://bugs.chromium.org/p/chromium/issues/detail?id=997689
const hasDefaultMicChanged = newDevices.audioinput === 'default';
promises.push(
mediaDeviceHelper.createLocalTracksAfterDeviceListChanged(
createLocalTracksF,
newDevices.videoinput,
newDevices.audioinput)
hasDefaultMicChanged
? getDefaultDeviceId(APP.store.getState(), 'audioInput')
: newDevices.audioinput)
.then(tracks => {
// If audio or video muted before, or we unplugged current
// device and selected new one, then mute new track.
@@ -2783,6 +2733,12 @@ export default {
// Use the new stream or null if we failed to obtain it.
return useStream(tracks.find(track => track.getType() === mediaType) || null)
.then(() => {
if (hasDefaultMicChanged) {
// workaround for the default device to be shown as selected in the
// settings even when the real device id was passed to gUM because of
// the above mentioned chrome bug.
this.localAudio._realDeviceId = this.localAudio.deviceId = 'default';
}
mediaType === 'audio'
? this._updateAudioDeviceId()
: this._updateVideoDeviceId();

107
config.js
View File

@@ -44,6 +44,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
@@ -54,6 +58,13 @@ var config = {
// Disables the auto-play behavior of *all* newly created video element.
// This is useful when the client runs on a host with limited resources.
// noAutoPlayVideo: false
// Enable / disable 500 Kbps bitrate cap on desktop tracks. When enabled,
// simulcast is turned off for the desktop share. If presenter is turned
// on while screensharing is in progress, the max bitrate is automatically
// adjusted to 2.5 Mbps. This takes a value between 0 and 1 which determines
// the probability for this to be enabled.
// capScreenshareBitrate: 1 // 0 to disable
},
// Disables ICE/UDP by filtering out local and remote UDP candidates in
@@ -100,6 +111,11 @@ 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
// opusMaxAvgBitrate: 20000,
// Video
// Sets the preferred resolution (height) for local video. Defaults to 720.
@@ -147,22 +163,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,
@@ -210,6 +210,21 @@ var config = {
// Default value for the channel "last N" attribute. -1 for unlimited.
channelLastN: -1,
// // Options for the recording limit notification.
// recordingLimit: {
//
// // The recording limit in minutes. Note: This number appears in the notification text
// // but doesn't enforce the actual recording time limit. This should be configured in
// // jibri!
// limit: 60,
//
// // The name of the app with unlimited recordings.
// appName: 'Unlimited recordings APP',
//
// // The URL of the app with unlimited recordings.
// appURL: 'https://unlimited.recordings.app.com/'
// },
// Disables or enables RTX (RFC 4588) (defaults to false).
// disableRtx: false,
@@ -238,11 +253,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
@@ -254,9 +272,6 @@ var config = {
// UI
//
// Use display name as XMPP nickname.
// useNicks: false,
// Require users to always specify a display name.
// requireDisplayName: true,
@@ -297,9 +312,14 @@ 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,
// Stats
//
@@ -317,10 +337,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
@@ -350,9 +370,9 @@ 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' }
],
]
// Sets the ICE transport policy for the p2p connection. At the time
// of this writing the list of possible values are 'all' and 'relay',
@@ -364,7 +384,7 @@ var config = {
// If set to true, it will prefer to use H.264 for P2P calls (if H.264
// is supported).
preferH264: true
// preferH264: true
// If set to true, disable H.264 video codec by stripping it out of the
// SDP.
@@ -386,6 +406,15 @@ var config = {
// The Amplitude APP Key:
// amplitudeAPPKey: '<APP_KEY>'
// Configuration for the rtcstats server:
// 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
@@ -490,6 +519,28 @@ var config = {
// If set to true all muting operations of remote participants will be disabled.
// disableRemoteMute: true,
/**
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 fields are mandatory and the response must have the shape:
{
// The hex value for the colour used as background
backgroundColor: '#fff',
// The url for the image used as background
backgroundImageUrl: 'https://example.com/background-img.png',
// The anchor url used when clicking the logo image
logoClickUrl: 'https://example-company.org',
// The url used for the image used as logo
logoImageUrl: 'https://example.com/logo-img.png'
}
*/
// 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

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);
@@ -113,6 +114,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 +171,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);
});
}

View File

@@ -1,5 +1,6 @@
.audio-preview {
&-content {
background: #2A3A4B;
font-size: 15px;
line-height: 24px;
max-height: 456px;
@@ -32,7 +33,7 @@
margin-left: 48px;
&--selected {
background: rgba(28,32,37,0.5);
background: #1C2025;
cursor: initial;
margin-left: 0;
padding-left: 21px;
@@ -55,7 +56,7 @@
&:hover {
.audio-preview-entry {
background: rgba(255,255,255, 0.2);
background: #3F4E5E;
margin-left: 0;
padding-left: 48px;
@@ -80,8 +81,23 @@
&-microphone {
position: relative;
}
&:hover {
.audio-preview-entry {
background: #3F4E5E;
margin-left: 0;
padding-left: 48px;
&--selected {
padding-left: 21px;
}
}
}
.audio-preview-entry-text {
max-width: 196px;
}
}
&-icon {
border-radius: 50%;

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;
}
@@ -115,8 +135,9 @@ form {
.leftwatermark {
left: 32px;
top: 32px;
background-image: url($defaultWatermarkLink);
background-position: center left;
background-repeat: no-repeat;
background-size: contain;
}
.rightwatermark {

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;

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;

144
css/_lobby.scss Normal file
View File

@@ -0,0 +1,144 @@
#lobby-screen {
.content {
.container {
align-items: center;
display: flex;
flex-direction: column;
.spinner {
margin: 30px;
}
.joining-message {
margin: 10px;
}
}
.form {
align-items: stretch;
display: flex;
flex-direction: column;
min-width: 400px;
}
.participant-info {
align-items: center;
display: flex;
flex-direction: column;
}
}
}
#lobby-section {
display: flex;
flex-direction: column;
.description {
font-size: 13px;
}
.control-row {
display: flex;
flex-direction: row;
justify-content: space-between;
margin-top: 15px;
label {
font-size: 14px;
font-weight: bold;
}
}
}
#knocking-participant-list {
background-color: $newToolbarBackgroundColor;
border: 1px solid rgba(255, 255, 255, .4);
border-radius: 8px;
display: flex;
flex-direction: column;
left: 0;
margin: 20px;
position: fixed;
top: 20;
transition: top 1s ease;
z-index: 100;
&.toolbox-visible {
// Same as toolbox subject position
top: 120px;
}
.title {
background-color: rgba(0, 0, 0, .2);
font-size: 1.2em;
padding: 15px
}
ul {
list-style-type: none;
padding: 0 15px 15px 15px;
li {
align-items: center;
display: flex;
flex-direction: row;
margin: 8px 0;
.details {
display: flex;
flex: 1;
flex-direction: column;
justify-content: space-evenly;
margin: 0 30px 0 10px;
}
button {
align-self: unset;
margin: 0 5px;
}
}
}
input {
align-self: stretch;
background-color: transparent;
border: 1px solid #B8C7E0;
border-radius: 4px;
color: white;
padding: 12px 8px;
&:focus {
border-color: rgb(3, 118, 218);
}
}
button {
align-self: stretch;
margin: 8px 0;
padding: 12px;
transition: .2s transform ease;
&:disabled {
opacity: .5;
}
&:hover {
transform: scale(1.05);
&:disabled {
transform: none;
}
}
&.borderLess {
background-color: transparent;
border-width: 0;
}
&.primary {
background-color: rgb(3, 118, 218);
border-width: 0;
}
}
}

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

@@ -1,18 +1,4 @@
.prejoin {
&-full-page {
background: #1C2025;
position: absolute;
width: 100%;
height: 100%;
z-index: $toolbarZ + 1;
}
&-input-area-container {
position: absolute;
bottom: 48px;
width: 100%;
z-index: 2;
}
&-input-area {
margin: 0 auto;
@@ -27,65 +13,6 @@
margin-bottom: 16px;
}
&-btn {
border-radius: 3px;
color: #fff;
cursor: pointer;
display: inline-block;
font-size: 15px;
line-height: 24px;
padding: 7px 16px;
position: relative;
text-align: center;
width: 286px;
&--primary {
background: #0376DA;
border: 1px solid #0376DA;
}
&--secondary {
background: #2A3A4B;
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;
.prejoin-btn-icon {
& > svg {
fill: #AFB6BC;
}
}
.prejoin-btn-options {
border-left: 1px solid #AFB6BC;
}
}
}
&-btn-options {
align-items: center;
border-left: 1px solid #fff;
display: flex;
height: 100%;
justify-content: center;
position: absolute;
right: 0;
top: 0;
width: 40px;
}
&-text-btns {
display: flex;
justify-content: space-between;
@@ -109,13 +36,7 @@
}
&-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%;
}
}
@@ -179,25 +100,6 @@
margin: 200px auto 0 auto;
}
&-btn-container {
display: flex;
justify-content: center;
margin-top: 32px;
width: 100%;
&> div {
margin: 0 12px;
}
.settings-button-small-icon {
right: -8px;
&--hovered {
right: -10px;
}
}
}
&-overlay {
height: 100%;
position: absolute;
@@ -217,22 +119,20 @@
&-status {
align-items: center;
bottom: 0;
align-self: stretch;
color: #fff;
display: flex;
font-size: 13px;
min-height: 24px;
justify-content: center;
position: absolute;
text-align: center;
width: 100%;
z-index: 1;
&--warning {
background: rgba(241, 173, 51, 0.5)
background: rgba(241, 173, 51, 0.7)
}
&--ok {
background: rgba(49, 183, 106, 0.5);
background: rgba(49, 183, 106, 0.7);
}
}
@@ -291,63 +191,3 @@
}
}
.prejoin-copy {
&-meeting {
cursor: pointer;
color: #fff;
font-size: 15px;
font-weight: 300;
line-height: 24px;
position: relative;
}
&-url {
max-width: 278px;
padding: 8px 10px;
overflow: hidden;
text-overflow: ellipsis;
}
&-badge {
border-radius: 4px;
height: 100%;
line-height: 38px;
position: absolute;
padding-left: 10px;
text-align: left;
top: 0;
width: 100%;
&--hover {
background: #1C2025;
}
&--done {
background: #31B76A;
}
}
&-icon {
position: absolute;
right: 8px;
top: 8px;
&--white {
&> svg > path {
fill: #fff
}
}
&--light {
&> svg > path {
fill: #D1DBE8;
}
}
}
&-textarea {
position: absolute;
left: -9999px;
}
}

View File

@@ -0,0 +1,281 @@
/**
* 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: radial-gradient(50% 50% at 50% 50%, #5D95C7 0%, #376288 100%), #FFFFFF;
display: flex;
flex-direction: column;
font-size: 1.3em;
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;
display: flex;
flex: 1;
flex-direction: column;
justify-content: flex-end;
z-index: $toolbarZ + 2;
.title {
color: #fff;
font-size: 24px;
line-height: 32px;
margin-bottom: 16px;
}
.copy-meeting {
align-items: center;
cursor: pointer;
color: #fff;
display: flex;
flex-direction: row;
font-size: 15px;
font-weight: 300;
justify-content: center;
line-height: 24px;
margin-bottom: 16px;
.url {
display: flex;
padding: 8px 10px;
&:hover {
background: #1C2025;
border-radius: 4px;
}
&.done {
background: #31B76A;
}
.jitsi-icon {
margin-left: 10px;
}
}
.copy-meeting-text {
width: 266px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&:hover {
align-self: stretch;
}
textarea {
border-width: 0;
height: 0;
opacity: 0;
padding: 0;
width: 0;
}
}
input.field {
background-color: transparent;
border: 1px solid transparent;
color: white;
outline-width: 0;
padding: 8px 0;
text-align: center;
width: 100%;
&.focused {
border-bottom: 1px solid white;
}
&.error::placeholder {
color: $defaultWarningColor;
}
}
}
.media-btn-container {
display: flex;
justify-content: center;
margin: 32px 0;
width: 100%;
&> div {
margin: 0 12px;
}
.settings-button-small-icon {
right: -8px;
&--hovered {
right: -10px;
}
}
}
}
#preview {
height: 100%;
position: absolute;
width: 100%;
&.no-video {
background: radial-gradient(50% 50% at 50% 50%, #5B6F80 0%, #365067 100%), #FFFFFF;
text-align: center;
}
.preview-avatar-container {
width: 100%;
height: 80%;
display: flex;
align-items: center;
justify-content: center;
}
.avatar {
background: #A4B8D1;
}
video {
height: 100%;
object-fit: cover;
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);
}
}

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

@@ -101,7 +101,6 @@ $sidebarWidth: 375px;
* Misc.
*/
$borderRadius: 4px;
$defaultWatermarkLink: '../images/watermark.png';
$popoverMenuPadding: 13px;
$happySoftwareBackground: transparent;
$desktopAppDragBarHeight: 25px;
@@ -270,4 +269,3 @@ $chromeExtensionBannerTop: 80px;
$chromeExtensionBannerRight: 16px;
$chromeExtensionBannerTopInMeeting: 10px;
$chromeExtensionBannerRightInMeeeting: 10px;

View File

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

View File

@@ -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;

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

@@ -40,9 +40,6 @@
#remotePresenceMessage {
display: none !important;
}
#largeVideoContainer {
background-color: $defaultBackground !important;
}
/**
* Thumbnail popover menus can overlap other thumbnails. Setting an auto

View File

@@ -76,6 +76,7 @@ $flagsImagePath: "../images/";
@import 'filmstrip/vertical_filmstrip';
@import 'filmstrip/vertical_filmstrip_overrides';
@import 'labels';
@import 'lobby';
@import 'unsupported-browser/main';
@import 'modals/invite/add-people';
@import 'deep-linking/main';
@@ -96,5 +97,7 @@ $flagsImagePath: "../images/";
@import 'country-picker';
@import 'modals/invite/invite_more';
@import 'modals/security/security';
@import 'premeeting-screens';
@import 'e2ee';
/* Modules END */

View File

@@ -208,6 +208,12 @@
padding: 8px 16px;
background: #0376DA;
}
&.disabled {
& > a {
pointer-events: none;
}
}
}
&.stream {

View File

@@ -3,35 +3,54 @@
color: #fff;
font-size: 15px;
line-height: 24px;
&.password {
&.password-section {
display: flex;
justify-content: space-between;
align-items: center;
flex-direction: column;
&-actions {
a {
cursor: pointer;
text-decoration: none;
font-size: 14px;
color: #6FB1EA;
}
.description {
font-size: 13px;
}
& > :first-child:not(:last-child) {
margin-right: 24px;
.password {
align-items: center;
display: flex;
justify-content: space-between;
margin-top: 15px;
&-actions {
a {
cursor: pointer;
text-decoration: none;
font-size: 14px;
color: #6FB1EA;
}
& > :first-child:not(:last-child) {
margin-right: 24px;
}
}
}
}
.separator-line {
margin: 24px 0 24px -20px;
padding: 0 20px;
width: 100%;
height: 1px;
background: #5E6D7A;
&:last-child {
display: none;
}
}
}
}
.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;

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" }
};
@@ -46,8 +46,12 @@ VirtualHost "jitmeet.example.com"
"speakerstats";
"turncredentials";
"conference_duration";
"muc_lobby_rooms";
}
c2s_require_encryption = false
lobby_muc = "lobby.jitmeet.example.com"
main_muc = "conference.jitmeet.example.com"
-- muc_lobby_whitelist = { "recorder.jitmeet.example.com" } -- Here we can whitelist jibri to enter lobby enabled rooms
Component "conference.jitmeet.example.com" "muc"
storage = "memory"
@@ -81,3 +85,9 @@ Component "speakerstats.jitmeet.example.com" "speakerstats_component"
Component "conferenceduration.jitmeet.example.com" "conference_duration_component"
muc_component = "conference.jitmeet.example.com"
Component "lobby.jitmeet.example.com" "muc"
storage = "memory"
restrict_room_creation = true
muc_room_locking = false
muc_room_default_public_jids = true

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

@@ -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,136 +1,23 @@
/* eslint-disable no-unused-vars, no-var, max-len */
/* eslint sort-keys: ["error", "asc", {"caseSensitive": false}] */
var interfaceConfig = {
// TO FIX: this needs to be handled from SASS variables. There are some
// methods allowing to use variables both in css and js.
DEFAULT_BACKGROUND: '#474747',
/**
* 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
@@ -157,51 +44,114 @@ 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',
/**
* 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 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)
@@ -209,6 +159,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', '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
*/
@@ -261,15 +269,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

@@ -287,13 +287,13 @@ PODS:
- React-jsinspector (0.61.5-jitsi.1)
- react-native-background-timer (2.1.1):
- React
- react-native-calendar-events (1.7.3):
- react-native-calendar-events (2.0.0):
- React
- react-native-keep-awake (4.0.0):
- 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
@@ -365,7 +365,7 @@ PODS:
- React
- RNSVG (9.7.1):
- React
- RNWatch (0.2.0):
- RNWatch (0.4.3):
- React
- Yoga (1.14.0)
@@ -566,10 +566,10 @@ SPEC CHECKSUMS:
React-jsiexecutor: de1c37cf59ae9adcbf2be82eea0e090dc3f3205e
React-jsinspector: b76c4e84a7833bb4c90549d59ed53ec299ff912b
react-native-background-timer: 0d34748e53a972507c66963490c775321a88f6f2
react-native-calendar-events: 2fe35a9294af05de0ed819d3a1b5dac048d2c010
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
@@ -586,7 +586,7 @@ SPEC CHECKSUMS:
RNGoogleSignin: 39336070b35fc4cea6a98cf111e00480317be0ae
RNSound: c980916b596cc15c8dcd2f6ecd3b13c4881dbe20
RNSVG: aac12785382e8fd4f28d072fe640612e34914631
RNWatch: 09738b339eceb66e4d80a2371633ca5fb380fa42
RNWatch: a5320c959c75e72845c07985f3e935e58998f1d3
Yoga: 7b4209fda2441f99d54dd6cf4c82b094409bb68f
PODFILE CHECKSUM: 082858daebbe170e7a490de433e7f2a99e0c3701

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

@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>2.8.1</string>
<string>2.9.0</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"
}

38
lang/languages-mr.json Normal file
View File

@@ -0,0 +1,38 @@
{
"en": "English",
"af": "Afrikaans",
"az": "",
"bg": "Bulgarian",
"cs": "Czech",
"de": "German",
"el": "Greek",
"eo": "Esperanto",
"es": "Spanish",
"fr": "French",
"hy": "Armenian",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"nb": "",
"oc": "Occitan",
"pl": "Polish",
"ptBR": "Portuguese (Brazil)",
"ru": "Russian",
"sk": "",
"sl": "",
"sv": "Swedish",
"tr": "Turkish",
"vi": "Vietnamese",
"zhCN": "Chinese (China)",
"zhTW": "Chinese (Taiwan)",
"nl": "Dutch",
"hu": "Hungarian",
"hr": "Croatian",
"frCA": "French (Canadian)",
"fi": "Finnish",
"et": "Estonian",
"esUS": "Spanish (Latin America)",
"enGB": "English (United Kingdom)",
"da": "Danish",
"ca": "Catalan"
}

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

@@ -1,38 +1,45 @@
{
"en": "Engleză",
"af": "Afrikaans",
"az": "",
"ar": "Arabă",
"bg": "Bulgară",
"ca": "Catalană",
"cs": "Cehă",
"da": "Daneză",
"de": "Germană",
"el": "Greacă",
"enGB": "Engleză (Regatul Unit)",
"eo": "Esperanto",
"es": "Spaniolă",
"esUS": "Spaniolă (America Latină)",
"et": "Estonă",
"eu": "Bască",
"fi": "Finlandeză",
"fr": "Franceză",
"hy": "Armeniana",
"frCA": "Franceză (Canada)",
"he": "Ebraică",
"hr": "Croată",
"hu": "Maghiară",
"hy": "Armeană",
"id": "Indoneziană",
"it": "Italiană",
"ja": "Japoneză",
"ko": "Koreană",
"nb": "",
"oc": "Occitan",
"lt": "Lituaniană",
"nl": "Olandeză",
"oc": "Occitană",
"pl": "Poloneză",
"ptBR": "Portugheză (Brazilia)",
"ru": "Rusă",
"ro": "Română",
"sc": "Sardă",
"sk": "Slovacă",
"sl": "Slovenă",
"sv": "Suedeză",
"th": "Thailandeză",
"tr": "Turcă",
"uk": "Ucraineană",
"vi": "Vietnameză",
"zhCN": "Chineză (China)",
"zhTW": "Chineză (Taiwan)",
"nl": "Olandeză",
"hu": "Maghiară",
"hr": "Croată",
"frCA": "Franceză (Canadia)",
"fi": "Finlandeză",
"et": "Estoniană",
"esUS": "Spaniolă (America Latină)",
"enGB": "Engleză (Regatul Unit)",
"da": "Daneză",
"că": "Catalană"
"zhTW": "Chineză (Taiwan)"
}

View File

@@ -18,6 +18,7 @@
"fr": "French",
"frCA": "French (Canadian)",
"he": "Hebrew",
"mr":"Marathi",
"hr": "Croatian",
"hu": "Hungarian",
"hy": "Armenian",

View File

@@ -1,11 +1,20 @@
{
"addPeople": {
"add": "Einladen",
"addContacts": "Laden Sie Ihre Kontakte ein",
"copyInvite": "Sitzungseinladung kopieren",
"copyLink": "Meeting-Link kopieren",
"copyStream": "Live-Streaming-Link 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.",
"inviteMoreHeader": "Sie sind alleine in der Sitzung",
"inviteMoreMailSubject": "An {{appName}} Meeting teilnehmen",
"inviteMorePrompt": "Mehr Leute einladen",
"linkCopied": "Link in die Zwischenablage kopiert",
"loading": "Suche nach Teilnehmern und Telefonnummern",
"loadingNumber": "Telefonnummer wird überprüft",
"loadingPeople": "Suche nach einzuladenden Teilnehmern",
@@ -14,6 +23,9 @@
"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",
"telephone": "Telefon: {{number}}",
"title": "Teilnehmer zu dieser Konferenz einladen"
},
@@ -518,6 +530,11 @@
"sectionList": {
"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",
"insecureRoomNameWarning": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten",
"securityOptions": "Sicherheitsoptionen"
},
"settings": {
"calendar": {
"about": "Die Kalenderintegration von {{appName}} wird verwendet, um ein sicheres Zugreifen auf Ihren Kalender und Auslesen der bevorstehenden Termine zu ermöglichen.",
@@ -612,6 +629,7 @@
"raiseHand": "„Melden“ ein-/ausschalten",
"recording": "Aufzeichnung ein-/ausschalten",
"remoteMute": "Teilnehmer stummschalten",
"security": "Sicherheitsoptionen",
"Settings": "Einstellungen ein-/ausschalten",
"sharedvideo": "YouTube-Videofreigabe ein-/ausschalten",
"shareRoom": "Person einladen",
@@ -663,6 +681,7 @@
"profile": "Profil bearbeiten",
"raiseHand": "Hand erheben",
"raiseYourHand": "Melden",
"security": "Sicherheitsoptionen",
"Settings": "Einstellungen",
"sharedvideo": "YouTube-Video teilen",
"shareRoom": "Person einladen",

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.",

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.",

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,7 +190,7 @@
"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",
@@ -468,6 +484,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...",
@@ -679,7 +729,6 @@
"videomute": "Démarrer / Arrêter la caméra",
"startvideoblur": "Flouter mon arrière plan",
"stopvideoblur": "Désactiver le flou d'arrière-plan",
"muteEveryone": "Mettre tout le monde en sourdine",
"noAudioSignalDialInDesc": "Vous pouvez également composer un numéro en utilisant :",
"noAudioSignalDialInLinkDesc": "Numéros d'appel"
},
@@ -784,5 +833,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": "ダイヤルイン番号はありません。",

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"
}
}

815
lang/main-mr.json Normal file
View File

@@ -0,0 +1,815 @@
{
"addPeople": {
"add": "आमंत्रित करा",
"countryNotSupported": "आम्ही अद्याप या गंतव्याचे समर्थन करत नाही.",
"countryReminder": "यूएस बाहेर कॉल करीत आहे? कृपया आपण देशाच्या कोडसह प्रारंभ केल्याचे सुनिश्चित करा!",
"disabled": "आपण लोकांना आमंत्रित करू शकत नाही.",
"failedToAdd": "सहभागी जोडण्यात अयशस्वी",
"footerText": "डायल आउट करणे अक्षम केले आहे.",
"loading": "लोक आणि फोन नंबर शोधत आहे",
"loadingNumber": "फोन नंबर सत्यापित करीत आहे",
"loadingPeople": "लोकांना आमंत्रित करण्यासाठी शोधत आहे",
"noResults": "कोणतेही जुळणारे शोध परिणाम नाहीत",
"noValidNumbers": "कृपया एक फोन नंबर प्रविष्ट करा",
"searchNumbers": "फोन नंबर जोडा",
"searchPeople": "लोकांचा शोध घ्या",
"searchPeopleAndNumbers": "लोक शोधा किंवा त्यांचा फोन नंबर जोडा",
"telephone": "दूरध्वनी: {{number}}",
"title": "या संमेलनात लोकांना आमंत्रित करा"
},
"audioDevices": {
"bluetooth": "ब्लूटुथ",
"headphones": "हेडफोन",
"phone": "फोन",
"speaker": "स्पीकर",
"none": "कोणतेही ऑडिओ डिव्हाइस उपलब्ध नाहीत"
},
"audioOnly": {
"audioOnly": "कमी बँडविड्थ"
},
"calendarSync": {
"addMeetingURL": "मीटिंगचा दुवा जोडा",
"confirmAddLink": "आपण या कार्यक्रमास एक Jitsi दुवा जोडू इच्छिता?",
"error": {
"appConfiguration": "कॅलेंडर समाकलन योग्यरित्या कॉन्फिगर केलेले नाही.",
"generic": "त्रुटी आढळली आहे. कृपया आपल्या कॅलेंडर सेटिंग्ज तपासा किंवा कॅलेंडर रीफ्रेश करा.",
"notSignedIn": "कॅलेंडर इव्हेंट पाहण्यासाठी प्रमाणीकरण करताना त्रुटी आली. कृपया आपल्या कॅलेंडर सेटिंग्ज तपासा आणि पुन्हा लॉग इन करण्याचा प्रयत्न करा."
},
"join": "सामील व्हा",
"joinTooltip": "बैठकीत सामील व्हा",
"nextMeeting": "पुढील बैठक",
"noEvents": "कोणतेही आगामी कार्यक्रम शेड्यूल केलेले नाहीत.",
"ongoingMeeting": "चालू बैठक",
"permissionButton": "सेटिंग्ज उघडा",
"permissionMessage": "अ‍ॅपमधील आपली संमेलने पहाण्यासाठी कॅलेंडर परवानगी आवश्यक आहे.",
"refresh": "रीफ्रेश कॅलेंडर",
"today": "आज"
},
"chat": {
"error": "Error: तुमचा संदेश पाठविला गेला नाही. कारणः {{error}}",
"fieldPlaceHolder": "आपला संदेश येथे टाइप करा",
"messagebox": "एक संदेश टाइप करा",
"messageTo": "यांना खाजगी संदेश {{recipient}}",
"noMessagesMessage": "अद्याप मीटिंगमध्ये कोणतेही संदेश नाहीत. येथे संभाषण सुरू करा!",
"nickname": {
"popover": "टोपणनाव निवडा",
"title": "चॅट वापरण्यासाठी टोपणनाव प्रविष्ट करा"
},
"privateNotice": "यांना खाजगी संदेश{{recipient}}",
"title": "गप्पा",
"you": "आपण"
},
"chromeExtensionBanner": {
"installExtensionText": "Google कॅलेंडर आणि ऑफिस 365 एकत्रिकरणासाठी विस्तार स्थापित करा",
"buttonText": "Chrome विस्तार स्थापित करा",
"dontShowAgain": "मला हे पुन्हा दर्शवू नका"
},
"connectingOverlay": {
"joiningRoom": "आपल्याला आपल्या संमेलनात कनेक्ट करीत आहे ..."
},
"connection": {
"ATTACHED": "जोडले",
"AUTHENTICATING": "प्रमाणीकरण करीत आहे",
"AUTHFAIL": "प्रमाणीकरण अयशस्वी",
"CONNECTED": "जोडलेले",
"CONNECTING": "कनेक्ट करीत आहे",
"CONNFAIL": "संपर्क खंडित",
"DISCONNECTED": "डिस्कनेक्ट केलेले",
"DISCONNECTING": "डिस्कनेक्ट करत आहे",
"ERROR": "त्रुटी",
"FETCH_SESSION_ID": "सत्र आयडी प्राप्त करीत आहे ...",
"GET_SESSION_ID_ERROR": "सत्र-आयडी त्रुटी मिळवा:{{code}}",
"GOT_SESSION_ID": "सत्र-आयडी मिळवित आहे ... पूर्ण झाले",
"LOW_BANDWIDTH": "बँडविड्थ जतन करण्यासाठी {{displayName}}चा व्हिडिओ बंद केला गेला आहे"
},
"connectionindicator": {
"address": "पत्ता:",
"bandwidth": "अंदाजे बँडविड्थ:",
"bitrate": "बिटरेट:",
"bridgeCount": "सर्व्हर संख्या:",
"connectedTo": "यांना जोडलेले:",
"e2e_rtt": "E2E आरटीटी:",
"framerate": "फ्रेम दर:",
"less": "कमी दाखवा",
"localaddress": "स्थानिक पत्ता:",
"localaddress_plural": "स्थानिक पत्ते:",
"localport": "स्थानिक बंदर:",
"localport_plural": "स्थानिक बंदरे:",
"more": "अजून दाखवा",
"packetloss": "पॅकेट तोटा",
"quality": {
"good": "चांगले",
"inactive": "निष्क्रिय",
"lost": "हरवले",
"nonoptimal": "नॉनओप्टिमल",
"poor": "गरीब"
},
"remoteaddress": "दूरस्थ पत्ता:",
"remoteaddress_plural": "दूरस्थ पत्ते:",
"remoteport": "रिमोट पोर्ट:",
"remoteport_plural": "दूरस्थ बंदरे:",
"resolution": "ठराव:",
"status": "कनेक्शन:",
"transport": "वाहतूक:",
"transport_plural": "परिवहन:"
},
"dateUtils": {
"earlier": "यापूर्वी",
"today": "आज",
"yesterday": "काल"
},
"deepLinking": {
"appNotInstalled": "आपल्या फोनवर या संमेलनात सामील होण्यासाठी आपल्यास {{app}}मोबाइल अॅप आवश्यक आहे.",
"description": "काहीच घडलं नाही? आम्ही आपली बैठक {{app}} डेस्कटॉप अॅपमध्ये लाँच करण्याचा प्रयत्न केला. पुन्हा प्रयत्न करा किंवा {{app}} वेब अ‍ॅपमध्ये लाँच करा",
"descriptionWithoutWeb": "काहीच घडलं नाही? आम्ही आपली बैठक {{app}} डेस्कटॉप अॅपमध्ये लाँच करण्याचा प्रयत्न केला.",
"downloadApp": "अ‍ॅप डाउनलोड करा",
"launchWebButton": "वेबमध्ये लाँच करा",
"openApp": "अ‍ॅप वर सुरू ठेवा",
"title": " {{app}}मध्ये आपली बैठक सुरू करत आहे",
"tryAgainButton": "डेस्कटॉपवर पुन्हा प्रयत्न करा"
},
"defaultLink": "उदा. {{url}}",
"defaultNickname": " उदा. जेन गुलाबी",
"deviceError": {
"cameraError": "आपल्या कॅमेर्‍यावर प्रवेश करण्यात अयशस्वी",
"cameraPermission": "कॅमेर्‍याची परवानगी घेण्यात त्रुटी",
"microphoneError": "आपल्या मायक्रोफोनवर प्रवेश करण्यात अयशस्वी",
"microphonePermission": "मायक्रोफोन परवानगी प्राप्त करताना त्रुटी"
},
"deviceSelection": {
"noPermission": "परवानगी दिली नाही",
"previewUnavailable": "पूर्वावलोकन अनुपलब्ध",
"selectADevice": "एक डिव्हाइस निवडा",
"testAudio": "चाचणी आवाज प्ले करा"
},
"dialog": {
"accessibilityLabel": {
"liveStreaming": "थेट प्रसारण"
},
"allow": "परवानगी द्या",
"alreadySharedVideoMsg": "दुसरा सहभागी आधीपासूनच व्हिडिओ सामायिक करीत आहे. ही परिषद एका वेळी फक्त एकच सामायिक व्हिडिओ परवानगी देते.",
"alreadySharedVideoTitle": "एकावेळी फक्त सामायिक केलेला व्हिडिओ अनुमत आहे",
"applicationWindow": "अनुप्रयोग विंडो",
"Back": "Back",
"cameraConstraintFailedError": "आपला कॅमेरा काही आवश्यक मर्यादा पूर्ण करीत नाही.",
"cameraNotFoundError": "कॅमेरा आढळला नाही.",
"cameraNotSendingData": "आम्ही आपल्या कॅमेर्‍यावर प्रवेश करण्यात अक्षम आहोत. कृपया एखादा दुसरा अनुप्रयोग हे डिव्हाइस वापरत आहे की नाही ते तपासा, सेटिंग्ज मेनूमधून दुसरे डिव्हाइस निवडा किंवा अनुप्रयोग रीलोड करण्याचा प्रयत्न करा.",
"cameraNotSendingDataTitle": "कॅमेर्‍यावर प्रवेश करण्यात अक्षम",
"cameraPermissionDeniedError": "आपल्याला आपला कॅमेरा वापरण्याची परवानगी नाही. आपण अद्याप परिषदेत सामील होऊ शकता परंतु इतर आपल्याला पाहणार नाहीत. हे निश्चित करण्यासाठी अ‍ॅड्रेस बारमधील कॅमेरा बटण वापरा.",
"cameraUnknownError": "अज्ञात कारणासाठी कॅमेरा वापरू शकत नाही.",
"cameraUnsupportedResolutionError": "आपला कॅमेरा आवश्यक व्हिडिओ रिझोल्यूशनला समर्थन देत नाही.",
"Cancel": "रद्द करा",
"close": "बंद",
"conferenceDisconnectMsg": "आपण आपले नेटवर्क कनेक्शन तपासू शकता. सेकंदात पुन्हा कनेक्ट करत आहे {{seconds}}..",
"conferenceDisconnectTitle": "आपण डिस्कनेक्ट झाला आहात.",
"conferenceReloadMsg": "आम्ही हे निश्चित करण्याचा प्रयत्न करीत आहोत. पुन्हा कनेक्ट करत आहे. {{seconds}} sec...",
"conferenceReloadTitle": "दुर्दैवाने, काहीतरी चूक झाली",
"confirm": "पुष्टी",
"confirmNo": "नाही",
"confirmYes": "होय",
"connectError": "अरेरे! काहीतरी चूक झाली आणि आम्ही परिषदेत कनेक्ट होऊ शकलो नाही.",
"connectErrorWithMsg": "अरेरे! काहीतरी चूक झाली आणि आम्ही परिषदेत कनेक्ट होऊ शकलो नाही:{{msg}}",
"connecting": "कनेक्ट करीत आहे",
"contactSupport": "समर्थन संपर्क",
"copy": "Copy",
"dismiss": "Dismiss",
"displayNameRequired": "हाय! तुझे नाव काय आहे?",
"done": "पूर्ण झाले",
"e2eeDescription": "एंड-टू-एंड एनक्रिप्शन सध्या आहे प्रायोगिक. कृपया लक्षात ठेवा की एंड-टू-एंड एन्क्रिप्शन चालू केल्याने सर्व्हर-साइड प्रदान सेवा प्रभावीपणे अक्षम होईल: रेकॉर्डिंग, थेट प्रवाह आणि फोन सहभाग. हे देखील लक्षात ठेवा की मीटिंग केवळ समाविष्ट करण्यायोग्य प्रवाहांसाठी समर्थन असलेल्या ब्राउझरमधून सामील झालेल्या लोकांसाठीच कार्य करेल.",
"e2eeWarning": "चेतावणी:या बैठकीतील सर्व सहभागींना एंड-टू-एंड एनक्रिप्शनसाठी समर्थन असल्याचे दिसत नाही. आपण सक्षम केल्यास ते आपल्याला पाहण्यास किंवा ऐकण्यास सक्षम राहणार नाहीत.",
"enterDisplayName": "कृपया आपले नाव येथे प्रविष्ट करा",
"error": "त्रुटी",
"externalInstallationMsg": "आपल्याला आमचा डेस्कटॉप सामायिकरण विस्तार स्थापित करणे आवश्यक आहे.",
"externalInstallationTitle": "विस्तार आवश्यक",
"goToStore": "वेब स्टोअरवर जा",
"gracefulShutdown": "आमची सेवा सध्या देखभालीसाठी बंद आहे. कृपया पुन्हा प्रयत्न करा.",
"IamHost": "मी यजमान आहे",
"incorrectRoomLockPassword": "चुकीचा संकेतशब्द",
"incorrectPassword": "वापरकर्त्याचे नाव अथवा पासवर्ड चुकीचा",
"inlineInstallationMsg": "आपल्याला आमचा डेस्कटॉप सामायिकरण विस्तार स्थापित करणे आवश्यक आहे.",
"inlineInstallExtension": "स्थापित करा",
"internalError": "अरेरे! काहीतरी चूक झाली. पुढील त्रुटी आली:{{error}}",
"internalErrorTitle": "अंतर्गत त्रुटी",
"kickMessage": "अधिक तपशीलांसाठी आपण {{participantDisplayName}} वर संपर्क साधू शकता.",
"kickParticipantButton": "लाथ मारा",
"kickParticipantDialog": "आपणास खात्री आहे की आपण या सहभागीस लाथ मारायची आहे?",
"kickParticipantTitle": "या सहभागीला बाहेर करा?",
"kickTitle": "Ouch! {{participantDisplayName}} kicked you out of the meeting",
"liveStreaming": "थेट प्रवाह",
"liveStreamingDisabledForGuestTooltip": "अतिथी थेट प्रवाह सुरू करू शकत नाहीत.",
"liveStreamingDisabledTooltip": "थेट प्रवाह अक्षम करा.",
"lockMessage": "परिषद लॉक करण्यात अयशस्वी.",
"lockRoom": "मीटिंग जोडा $t(lockRoomPasswordUppercase)",
"lockTitle": "लॉक अयशस्वी",
"logoutQuestion": "आपणास खात्री आहे की आपण लॉगआउट आणि परिषद थांबवू इच्छिता?",
"logoutTitle": "बाहेर पडणे",
"maxUsersLimitReached": "जास्तीत जास्त सहभागी होण्याची मर्यादा गाठली आहे. परिषद भरली आहे. कृपया मीटिंग मालकाशी संपर्क साधा किंवा नंतर पुन्हा प्रयत्न करा!",
"maxUsersLimitReachedTitle": "जास्तीत जास्त सहभागींची मर्यादा गाठली",
"micConstraintFailedError": "आपला मायक्रोफोन आवश्यक असलेल्या काही मर्यादा पूर्ण करीत नाही.",
"micNotFoundError": "मायक्रोफोन सापडला नाही.",
"micNotSendingData": "आपला माईक सशब्द करण्यासाठी आणि त्याचा स्तर समायोजित करण्यासाठी आपल्या संगणकाच्या सेटिंग्जवर जा",
"micNotSendingDataTitle": "आपले माइक आपल्या सिस्टम सेटिंग्जद्वारे निःशब्द केले आहे",
"micPermissionDeniedError": "आपल्याला आपला मायक्रोफोन वापरण्याची परवानगी नाही. आपण अद्याप परिषदेत सामील होऊ शकता परंतु इतर आपले ऐकणार नाहीत. हे निश्चित करण्यासाठी अ‍ॅड्रेस बारमधील कॅमेरा बटण वापरा.",
"micUnknownError": "Cannot use microphone for an unknown reason.",
"muteEveryoneElseDialog": "एकदा नि: शब्द झाल्यास आपण त्यांना ध्वनीमुद्रित करण्यास सक्षम राहणार नाही परंतु ते कधीही स्वत: ला सशब्द करू शकतात.",
"muteEveryoneElseTitle": "सोडून सर्वांना नि: शब्द करा{{whom}}?",
"muteEveryoneDialog": "आपली खात्री आहे की आपण प्रत्येकाला निःशब्द करू इच्छिता? आपण त्यांना सशब्द करण्यास सक्षम राहणार नाही परंतु ते कधीही स्वत: ला सशब्द करू शकतात.",
"muteEveryoneTitle": "सर्वांना नि: शब्द करा?",
"muteEveryoneSelf": "तू स्वतः",
"muteEveryoneStartMuted": "आतापासून प्रत्येकजण निःशब्द होऊ लागतो",
"muteParticipantBody": "आपण त्यांना सशब्द करण्यास सक्षम राहणार नाही परंतु ते कधीही स्वत: ला सशब्द करू शकतात.",
"muteParticipantButton": "नि: शब्द करा",
"muteParticipantDialog": "आपली खात्री आहे की आपण या सहभागीस नि: शब्द करू इच्छिता? आपण त्यांना सशब्द करण्यास सक्षम राहणार नाही परंतु ते कधीही स्वत: ला सशब्द करू शकतात.",
"muteParticipantTitle": "हा सहभागी नि: शब्द करायचा?",
"Ok": "Ok",
"passwordLabel": "संमेलनास एका सहभागीने लॉक केले आहे. कृपया सामील होण्यासाठी $t(lockRoomPassword) प्रविष्ट करा.",
"passwordNotSupported": "मीटिंग सेट करणे $t(lockRoomPassword) समर्थित नाही..",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) समर्थित नाही",
"passwordRequired": "$t(lockRoomPasswordUppercase)आवश्यक",
"popupError": "आपला ब्राउझर या साइटवरील पॉप-अप विंडोज अवरोधित करत आहे. कृपया आपल्या ब्राउझरच्या सुरक्षा सेटिंग्जमध्ये पॉप-अप सक्षम करा आणि पुन्हा प्रयत्न करा.",
"popupErrorTitle": "पॉप-अप अवरोधित",
"recording": "मुद्रित करणे",
"recordingDisabledForGuestTooltip": "अतिथी रेकॉर्डिंग प्रारंभ करू शकत नाहीत.",
"recordingDisabledTooltip": "रेकॉर्डिंग प्रारंभ अक्षम.",
"rejoinNow": "आता पुन्हा सामील व्हा",
"remoteControlAllowedMessage": "{{user}} आपली रिमोट कंट्रोल विनंती मान्य केली!",
"remoteControlDeniedMessage": "{{user}} आपली रिमोट कंट्रोल विनंती नाकारली!",
"remoteControlErrorMessage": "वरून रिमोट कंट्रोल परवानग्यांची विनंती करण्याचा प्रयत्न करताना एक त्रुटी आली {{user}}!",
"remoteControlRequestMessage": "आपण{{user}} ला डेस्कटॉप दूरस्थपणे नियंत्रित करण्यास अनुमती द्याल?",
"remoteControlShareScreenWarning": "लक्षात ठेवा की आपण \"Allow\" दाबल्यास आपण आपली स्क्रीन सामायिक कराल!",
"remoteControlStopMessage": "रिमोट कंट्रोल सत्र संपले!",
"remoteControlTitle": "दूरस्थ डेस्कटॉप नियंत्रण",
"Remove": "काढा",
"removePassword": "काढा $t(lockRoomPassword)",
"removeSharedVideoMsg": " आपली खात्री आहे की आपण आपला सामायिक केलेला व्हिडिओ काढू इच्छिता?",
"removeSharedVideoTitle": "सामायिक केलेला व्हिडिओ काढा",
"reservationError": "आरक्षण प्रणाली त्रुटी",
"reservationErrorMsg": "Error code: {{code}}, message: {{msg}}",
"retry": "पुन्हा प्रयत्न करा",
"screenSharingAudio": "ऑडिओ सामायिक करा",
"screenSharingFailedToInstall": "अरेरे! आपला स्क्रीन सामायिकरण विस्तार स्थापित करण्यात अयशस्वी.",
"screenSharingFailedToInstallTitle": "स्क्रीन सामायिकरण विस्तार स्थापित करण्यात अयशस्वी",
"screenSharingFirefoxPermissionDeniedError": "आम्ही आपली स्क्रीन सामायिक करण्याचा प्रयत्न करीत असताना काहीतरी चुकीचे झाले. कृपया याची खात्री करा की आपण आम्हाला तसे करण्यास परवानगी दिली आहे.",
"screenSharingFirefoxPermissionDeniedTitle": "अरेरे! आम्ही स्क्रीन सामायिकरण प्रारंभ करण्यास सक्षम नाही!",
"screenSharingPermissionDeniedError": "अरेरे! आपल्या स्क्रीन सामायिकरण विस्तार परवानग्यांसह काहीतरी चूक झाली. कृपया रीलोड करा आणि पुन्हा प्रयत्न करा.",
"sendPrivateMessage": "आपल्याला अलीकडे एक खाजगी संदेश प्राप्त झाला आहे. त्यास खाजगीरित्या उत्तर देण्याचा आपला हेतू होता की आपण आपला संदेश गटाला पाठवू इच्छिता?",
"sendPrivateMessageCancel": "गटाला पाठवा",
"sendPrivateMessageOk": "खाजगी पाठवा",
"sendPrivateMessageTitle": "खाजगी पाठवायचे?",
"serviceUnavailable": "सेवा अनुपलब्ध",
"sessTerminated": "कॉल संपुष्टात आला",
"Share": "सामायिक करा",
"shareVideoLinkError": "कृपया योग्य YouTube दुवा प्रदान करा.",
"shareVideoTitle": "एक व्हिडिओ सामायिक करा",
"shareYourScreen": "आपली स्क्रीन सामायिक करा",
"shareYourScreenDisabled": "स्क्रीन सामायिकरण अक्षम केले.",
"shareYourScreenDisabledForGuest": "अतिथी स्क्रीन सामायिकरण करू शकत नाहीत.",
"startLiveStreaming": "थेट प्रवाह सुरू करा",
"startRecording": "रेकॉर्डिंग प्रारंभ करा",
"startRemoteControlErrorMessage": "रिमोट कंट्रोल सत्र सुरू करण्याचा प्रयत्न करताना एक त्रुटी आली!",
"stopLiveStreaming": "थेट प्रवाह थांबवा",
"stopRecording": "रेकॉर्डिंग थांबवा",
"stopRecordingWarning": "आपली खात्री आहे की आपण रेकॉर्डिंग थांबवू इच्छिता?",
"stopStreamingWarning": "आपणास खात्री आहे की आपण थेट प्रवाह थांबवू इच्छिता?",
"streamKey": "थेट प्रवाह की",
"Submit": "प्रस्तुत करणे",
"thankYou": "वापरल्याबद्दल धन्यवाद {{appName}}!",
"token": "टोकन",
"tokenAuthFailed": "क्षमस्व, आपणास या कॉलमध्ये सामील होण्याची परवानगी नाही.",
"tokenAuthFailedTitle": "प्रमाणीकरण अयशस्वी",
"transcribing": "लिप्यंतरण",
"unlockRoom": "मीटिंग काढा $t(lockRoomPassword)",
"userPassword": "user password",
"WaitForHostMsg": "परिषद <b>{{room}}</b>अद्याप सुरू झाले नाही. आपण होस्ट असल्यास कृपया अधिकृत करा. अन्यथा, कृपया होस्ट येण्याची प्रतीक्षा करा.",
"WaitForHostMsgWOk": "परिषद <b>{{room}}</b> अद्याप सुरू झाले नाही. आपण होस्ट असल्यास कृपया प्रमाणीकरणासाठी ओके दाबा. अन्यथा, कृपया होस्ट येण्याची प्रतीक्षा करा.",
"WaitingForHost": " होस्टची प्रतीक्षा करीत आहे ...",
"Yes": "होय",
"yourEntireScreen": "आपली संपूर्ण स्क्रीन"
},
"dialOut": {
"statusMessage": "आता आहे {{status}}"
},
"documentSharing": {
"title": "सामायिक दस्तऐवज"
},
"e2ee": {
"labelToolTip": "या बैठकीतील सर्व सहभागींनी एंड-टू-एंड एनक्रिप्शन सक्षम केले आहे"
},
"feedback": {
"average": "सरासरी",
"bad": "वाईट",
"detailsLabel": " त्याबद्दल आम्हाला सांगा.",
"good": "चांगले",
"rateExperience": "आपल्या भेटीचा अनुभव रेट करा",
"veryBad": "फार वाईट",
"veryGood": "खुप छान"
},
"incomingCall": {
"answer": "उत्तर",
"audioCallTitle": " कॉल येत आहे",
"decline": "काढून टाकणे",
"productLabel": "Jitsi Meet पासून",
"videoCallTitle": "येणारा व्हिडिओ कॉल"
},
"info": {
"accessibilityLabel": "माहिती दर्शवा",
"addPassword": "जोडा $t(lockRoomPassword)",
"cancelPassword": " रद्द करा $t(lockRoomPassword)",
"conferenceURL": "दुवा:",
"country": "देश",
"dialANumber": "आपल्या संमेलनात सामील होण्यासाठी, यापैकी एक क्रमांक डायल करा आणि नंतर पिन प्रविष्ट करा.",
"dialInConferenceID": "PIN:",
"dialInNotSupported": "क्षमस्व, सध्या डायल करणे समर्थित नाही.",
"dialInNumber": "डायल-इन:",
"dialInSummaryError": "आता डायल-इन माहिती आणताना त्रुटी. कृपया पुन्हा प्रयत्न करा.",
"dialInTollFree": "कर मुक्त",
"genericError": "अरेरे, काहीतरी चूक झाली.",
"inviteLiveStream": "या सभेचा थेट प्रवाह पाहण्यासाठी, या दुव्यावर क्लिक करा: {{url}}",
"invitePhone": "त्याऐवजी फोनद्वारे सामील होण्यासाठी, हे टॅप करा:{{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "वेगळा डायल-इन नंबर शोधत आहात? \nमीटिंग डायल-इन नंबर पहा: {{url}}\n\n\nIf also dialing-in through a room phone, join without connecting to audio: {{silentUrl}}",
"inviteURLFirstPartGeneral": " आपल्याला बैठकीत सामील होण्यासाठी आमंत्रित केले आहे.",
"inviteURLFirstPartPersonal": "{{name}} आपल्याला मीटिंगसाठी आमंत्रित करीत आहे.\n",
"inviteURLSecondPart": "\nसभेमध्ये सामील व्हा:\n{{url}}\n",
"liveStreamURL": "थेट प्रसारण:",
"moreNumbers": "अधिक संख्या",
"noNumbers": "डायल-इन नंबर नाहीत.",
"noPassword": "काहीही नाही",
"noRoom": "डायल-इन करण्यासाठी कोणतीही खोली निर्दिष्ट केलेली नाही.",
"numbers": "डायल-इन क्रमांक",
"password": "$t(lockRoomPasswordUppercase):",
"title": "सामायिक करा",
"tooltip": "या संमेलनासाठी दुवा आणि डायल-इन माहिती सामायिक करा",
"label": "संमेलनाची माहिती"
},
"inviteDialog": {
"alertText": "काही सहभागींना आमंत्रित करण्यात अयशस्वी.",
"header": "आमंत्रित करा",
"searchCallOnlyPlaceholder": " फोन नंबर प्रविष्ट करा",
"searchPeopleOnlyPlaceholder": "सहभागींचा शोध घ्या",
"searchPlaceholder": "सहभागी किंवा फोन नंबर",
"send": "पाठवा"
},
"inlineDialogFailure": {
"msg": "आम्ही जरा अडखळलो.",
"retry": "पुन्हा प्रयत्न करा",
"support": "आधार",
"supportMsg": "हे असेच होत राहिल्यास संपर्क साधा"
},
"keyboardShortcuts": {
"focusLocal": "आपल्या व्हिडिओवर लक्ष द्या",
"focusRemote": "दुसर्‍या व्यक्तीच्या व्हिडिओवर लक्ष द्या",
"fullScreen": "पूर्ण स्क्रीन पहा किंवा बाहेर पडा",
"keyboardShortcuts": "कीबोर्ड शॉर्टकट",
"localRecording": "स्थानिक रेकॉर्डिंग नियंत्रणे दर्शवा किंवा लपवा",
"mute": "आपला मायक्रोफोन नि: शब्द करा किंवा सशब्द करा",
"pushToTalk": "बोलण्यासाठी दाबा",
"raiseHand": "आपला हात वर करा किंवा कमी करा",
"showSpeakerStats": "स्पीकरची आकडेवारी दर्शवा",
"toggleChat": "गप्पा उघडा किंवा बंद करा",
"toggleFilmstrip": "व्हिडिओ लघुप्रतिमा दर्शवा किंवा लपवा",
"toggleScreensharing": "कॅमेरा आणि स्क्रीन सामायिकरण दरम्यान स्विच करा",
"toggleShortcuts": "कीबोर्ड शॉर्टकट दर्शवा किंवा लपवा",
"videoMute": "आपला कॅमेरा प्रारंभ करा किंवा थांबवा",
"videoQuality": "कॉल गुणवत्ता व्यवस्थापित करा"
},
"liveStreaming": {
"busy": " आम्ही प्रवाह स्त्रोत मुक्त करण्याचे कार्य करीत आहोत. कृपया काही मिनिटांत पुन्हा प्रयत्न करा.",
"busyTitle": "सर्व स्ट्रीमर सध्या व्यस्त आहेत",
"changeSignIn": "खाती स्विच करा.",
"choose": "थेट प्रवाह निवडा",
"chooseCTA": "प्रवाह पर्याय निवडा. आपण सध्या म्हणून लॉग इन आहात {{email}}.",
"enterStreamKey": " येथे आपली YouTube थेट प्रवाह की प्रविष्ट करा.",
"error": "थेट प्रवाह अयशस्वी. कृपया पुन्हा प्रयत्न करा.",
"errorAPI": "आपल्या YouTube प्रसारणामध्ये प्रवेश करताना त्रुटी आली. कृपया पुन्हा लॉग इन करून पहा.",
"errorLiveStreamNotEnabled": "{{email}}. वर थेट प्रवाह सक्षम केलेले नाही. कृपया थेट प्रवाह सक्षम करा किंवा थेट प्रवाह सक्षम केलेल्या खात्यात लॉग इन करा",
"expandedOff": "थेट प्रवाह थांबला आहे",
"expandedOn": "या संमेलनाचे सध्या युट्यूबवर प्रसारण केले जात आहे.",
"expandedPending": "थेट प्रवाह सुरू केला जात आहे ",
"failedToStart": "थेट प्रवाह सुरू करण्यात अयशस्वी",
"getStreamKeyManually": "आम्ही कोणतेही थेट प्रवाह आणण्यात सक्षम नाही. YouTube वरून आपली थेट प्रवाह की मिळवण्याचा प्रयत्न करा.",
"invalidStreamKey": "थेट प्रवाह की चुकीची असू शकते.",
"off": "थेट प्रवाह थांबला",
"offBy": "{{name}} थेट प्रवाह थांबविला",
"on": "थेट प्रवाह",
"onBy": "{{name}} थेट प्रवाह सुरू केला",
"pending": "थेट प्रवाह सुरू करत आहे ...",
"serviceName": "थेट प्रवाह सेवा",
"signedInAs": "आपण सध्या म्हणून साइन इन केले आहे:",
"signIn": "Google सह साइन इन करा",
"signInCTA": "YouTube वरून साइन इन करा किंवा आपली थेट प्रवाह की प्रविष्ट करा.",
"signOut": "साइन आउट करा",
"start": "थेट प्रवाह सुरू करा",
"streamIdHelp": "हे काय आहे?",
"unavailableTitle": "थेट प्रवाह अनुपलब्ध",
"youtubeTerms": "YouTube सेवा अटी",
"googlePrivacyPolicy": "Google गोपनीयता धोरण"
},
"localRecording": {
"clientState": {
"off": "बंद",
"on": "चालू",
"unknown": "अज्ञात"
},
"dialogTitle": "स्थानिक रेकॉर्डिंग नियंत्रणे",
"duration": "कालावधी",
"durationNA": "N/A",
"encoding": "एन्कोडिंग",
"label": "LOR",
"labelToolTip": "स्थानिक रेकॉर्डिंग गुंतलेली आहे",
"localRecording": "स्थानिक रेकॉर्डिंग",
"me": "Me",
"messages": {
"engaged": "स्थानिक रेकॉर्डिंग व्यस्त",
"finished": " रेकॉर्डिंग सत्र {{token}} . समाप्त. कृपया रेकॉर्ड केलेली फाईल नियंत्रकावर पाठवा.",
"finishedModerator": "रेकॉर्डिंग सत्र {{token}}. समाप्त. लोकल ट्रॅकचे रेकॉर्डिंग सेव्ह केले गेले आहे. कृपया इतर सहभागींना त्यांचे रेकॉर्डिंग सबमिट करण्यास सांगा.",
"notModerator": "आपण नियंत्रक नाही. आपण स्थानिक रेकॉर्डिंग प्रारंभ करू किंवा थांबवू शकत नाही."
},
"moderator": "नियंत्रक",
"no": "No",
"participant": "नियंत्रक",
"participantStats": "सहभागी आकडेवारी",
"sessionToken": "सत्र टोकन",
"start": "रेकॉर्डिंग प्रारंभ करा",
"stop": "रेकॉर्डिंग थांबवा",
"yes": "होय"
},
"lockRoomPassword": "संकेतशब्द",
"lockRoomPasswordUppercase": "संकेतशब्द",
"me": "मी",
"notify": {
"connectedOneMember": "{{name}} बैठकीत सामील झाले",
"connectedThreePlusMembers": "{{name}} आणि {{count}} इतर बैठकीत सामील झाले",
"connectedTwoMembers": "{{first}} आणि {{second}} बैठकीत सामील झाले",
"disconnected": "डिस्कनेक्ट झाले",
"focus": "परिषद लक्ष",
"focusFail": "{{component}} उपलब्ध नाही - पुन्हा प्रयत्न करा {{ms}} सेकंद",
"grantedTo": "नियंत्रक अधिकार यांना दिले {{to}}!",
"invitedOneMember": "{{name}}आमंत्रित केले गेले आहे",
"invitedThreePlusMembers": "{{name}} आणि {{count}} इतरांना आमंत्रित केले गेले आहे",
"invitedTwoMembers": "{{first}} आणि {{second}} आमंत्रित केले गेले आहे",
"kickParticipant": "{{kicked}} was kicked by {{kicker}}",
"me": "Me",
"moderator": "नियंत्रक अधिकार मंजूर!",
"muted": "आपण संभाषण निःशब्द केले आहे.",
"mutedTitle": "आपण निःशब्द आहात!",
"mutedRemotelyTitle": "आपण द्वारे निःशब्द केले गेले आहे {{participantDisplayName}}!",
"mutedRemotelyDescription": "आपण बोलण्यास तयार असता तेव्हा आपण नेहमी सशब्द करू शकता. आपण संमेलनापासून आवाज दूर ठेवण्यासाठी पूर्ण झाल्यावर परत नि: शब्द करा.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) दुसर्‍या सहभागीने काढले",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) दुसर्‍या सहभागीने सेट केलेले",
"raisedHand": "{{name}} बोलायला आवडेल.",
"somebody": "कुणीतरी",
"startSilentTitle": "आपण ऑडिओ आउटपुटसह सामील झालात!",
"startSilentDescription": "ऑडिओ सक्षम करण्यासाठी संमेलनात पुन्हा सामील व्हा",
"suboptimalBrowserWarning": " आम्हाला भीती वाटते की येथे आपल्या भेटीचा अनुभव इतका उत्कृष्ट होणार नाही. आम्ही यामध्ये सुधारणा करण्याचे मार्ग शोधत आहोत, परंतु तोपर्यंत कृपया त्यापैकी एक वापरून पहा <a href='static/recommendedBrowsers.html' target='_blank'>fully supported browsers</a>.",
"suboptimalExperienceTitle": "ब्राउझर चेतावणी",
"unmute": "सशब्द करा",
"newDeviceCameraTitle": "नवीन कॅमेरा आढळला",
"newDeviceAudioTitle": "नवीन ऑडिओ डिव्हाइस आढळले",
"newDeviceAction": "वापरा",
"OldElectronAPPTitle": "सुरक्षा असुरक्षा!",
"oldElectronClientDescription1": "आपण सुरक्षा असुरक्षा ज्ञात असलेल्या जितसी मीट क्लायंटची जुनी आवृत्ती वापरत असल्याचे दिसून येत आहे. कृपया आमच्याकडे आपण अद्यतनित असल्याची खात्री करा",
"oldElectronClientDescription2": "नवीनतम बिल्ड",
"oldElectronClientDescription3": " आता!"
},
"passwordSetRemotely": "दुसर्‍या सहभागीने सेट केलेले",
"passwordDigitsOnly": " पर्यंत {{number}} अंक",
"poweredby": "द्वारा समर्थित",
"prejoin": {
"audioAndVideoError": "ऑडिओ आणि व्हिडिओ त्रुटी:",
"audioOnlyError": "ऑडिओ त्रुटी:",
"audioTrackError": "ऑडिओ ट्रॅक तयार करू शकलो नाही.",
"callMe": "मला कॉल करा",
"callMeAtNumber": "मला या नंबरवर कॉल करा:",
"configuringDevices": "डिव्हाइस कॉन्फिगर करीत आहे ...",
"connectedWithAudioQ": "आपण ऑडिओशी कनेक्ट आहात?",
"copyAndShare": "मीटिंगचा दुवा कॉपी आणि सामायिक करा",
"dialInMeeting": "बैठकीत डायल करा",
"dialInPin": "संमेलनात डायल करा आणि पिन कोड प्रविष्ट करा:",
"dialing": "डायल करत आहे",
"iWantToDialIn": "मला डायल करायचे आहे",
"joinAudioByPhone": "फोन ऑडिओसह सामील व्हा",
"joinMeeting": "बैठकीत सामील व्हा",
"joinWithoutAudio": "ऑडिओशिवाय सामील व्हा",
"initiated": "कॉल सुरू झाला",
"linkCopied": "क्लिपबोर्डवर दुवा कॉपी केला",
"lookGood": "स्पीकर आणि मायक्रोफोन चांगले दिसतात",
"or": "किंवा",
"calling": "कॉल करीत आहे",
"startWithPhone": "फोन ऑडिओसह प्रारंभ करा",
"screenSharingError": "स्क्रीन सामायिकरण त्रुटी:",
"videoOnlyError": "व्हिडिओ त्रुटी:",
"videoTrackError": "व्हिडिओ ट्रॅक तयार करू शकलो नाही.",
"viewAllNumbers": "सर्व संख्या पहा"
},
"presenceStatus": {
"busy": "व्यस्त",
"calling": "कॉल करीत आहे ...",
"connected": "जोडलेले",
"connecting": "कनेक्ट करीत आहे ...",
"connecting2": "कनेक्ट करीत आहे ...",
"disconnected": "डिस्कनेक्ट केलेले",
"expired": "कालबाह्य",
"ignored": "दुर्लक्षित",
"initializingCall": "कॉल प्रारंभ करीत आहे ...",
"invited": "आमंत्रित केले",
"rejected": "नाकारले",
"ringing": "रिंग होत आहे ..."
},
"profile": {
"setDisplayNameLabel": " आपले प्रदर्शन नाव सेट करा",
"setEmailInput": "ई-मेल प्रविष्ट करा",
"setEmailLabel": "आपला गुरुतर ईमेल सेट करा",
"title": "प्रोफाइल"
},
"raisedHand": "बोलायला आवडेल",
"recording": {
"authDropboxText": " ड्रॉपबॉक्सवर अपलोड करा",
"availableSpace": "उपलब्ध जागा: {{spaceLeft}} MB (approximately {{duration}} रेकॉर्डिंग मिनिटे)",
"beta": "BETA",
"busy": "आम्ही रेकॉर्डिंग संसाधने मुक्त करण्यावर कार्य करीत आहोत. कृपया काही मिनिटांत पुन्हा प्रयत्न करा.",
"busyTitle": "सर्व रेकॉर्डर सध्या व्यस्त आहेत",
"error": "रेकॉर्डिंग अयशस्वी. कृपया पुन्हा प्रयत्न करा.",
"expandedOff": "रेकॉर्डिंग थांबले आहे",
"expandedOn": "सभेची नोंद सध्या घेतली जात आहे.",
"expandedPending": "रेकॉर्डिंग सुरू केले जात आहे ...",
"failedToStart": "रेकॉर्डिंग सुरू करण्यात अयशस्वी",
"fileSharingdescription": "मीटिंगमधील सहभागींसह रेकॉर्डिंग सामायिक करा",
"live": "LIVE",
"loggedIn": "म्हणून लॉग इन केले {{userName}}",
"off": "रेकॉर्डिंग थांबले",
"offBy": "{{name}} रेकॉर्डिंग थांबविले",
"on": "Recording",
"onBy": "{{name}} रेकॉर्डिंग सुरू केले",
"pending": "मीटिंग रेकॉर्ड करण्याची तयारी करत आहे ...",
"rec": "REC",
"serviceDescription": "आपले रेकॉर्डिंग रेकॉर्डिंग सेवेद्वारे जतन केले जाईल",
"serviceName": "रेकॉर्डिंग सेवा",
"signIn": "साइन इन करा",
"signOut": "साइन आउट करा",
"unavailable": " अरेरे! {{serviceName}} currently सध्या अनुपलब्ध आहे. आम्ही या समस्येचे निराकरण करण्याचे काम करीत आहोत. कृपया पुन्हा प्रयत्न करा.",
"unavailableTitle": "रेकॉर्डिंग अनुपलब्ध"
},
"sectionList": {
"pullToRefresh": "रीफ्रेश करण्यासाठी खेचा"
},
"settings": {
"calendar": {
"about": " {{appName}} कॅलेंडर समाकलन सुरक्षितपणे आपल्या कॅलेंडरमध्ये प्रवेश करण्यासाठी वापरले जाते जेणेकरून ते आगामी कार्यक्रम वाचू शकतील.",
"disconnect": "डिस्कनेक्ट करा",
"microsoftSignIn": "मायक्रोसॉफ्ट सह साइन इन करा",
"signedIn": "सध्या {{email}} साठी कॅलेंडर इव्हेंटमध्ये प्रवेश करत आहे. कॅलेंडर इव्हेंटमध्ये प्रवेश करणे थांबविण्यासाठी खालील डिस्कनेक्ट बटणावर क्लिक करा",
"title": "कॅलेंडर"
},
"devices": "उपकरणे",
"followMe": "प्रत्येकजण माझ्या मागे येतो",
"language": "भाषा",
"loggedIn": "{{name}} म्हणून लॉग इन केले",
"microphones": "मायक्रोफोन",
"moderator": "नियंत्रक",
"more": "अधिक",
"name": "नाव",
"noDevice": "काहीही नाही",
"selectAudioOutput": "ऑडिओ आउटपुट",
"selectCamera": "कॅमेरा",
"selectMic": "मायक्रोफोन",
"speakers": "स्पीकर्स",
"startAudioMuted": " प्रत्येकजण निःशब्द होतो",
"startVideoMuted": "प्रत्येकजण दडलेला सुरू होतो",
"title": "सेटिंग्ज"
},
"settingsView": {
"advanced": "प्रगत",
"alertOk": "ठीक आहे",
"alertTitle": "चेतावणी",
"alertURLText": "प्रविष्ट केलेली सर्व्हर URL अवैध आहे",
"buildInfoSection": "बिल्ड माहिती",
"conferenceSection": "परिषद",
"disableCallIntegration": "नेटिव्ह कॉल एकत्रीकरण अक्षम करा",
"disableP2P": " पीअर-टू-पीअर मोड अक्षम करा",
"displayName": " नाव प्रदर्शन",
"email": "ईमेल",
"header": "सेटिंग्ज",
"profileSection": "प्रोफाइल",
"serverURL": "सर्व्हर URL",
"showAdvanced":"प्रगत सेटिंग्ज दर्शवा",
"startWithAudioMuted": "ऑडिओ नि: शब्द सह प्रारंभ करा",
"startWithVideoMuted": "निःशब्द व्हिडिओसह प्रारंभ करा",
"version": "आवृत्ती"
},
"share": {
"dialInfoText": "\n\n=====\n\nफक्त आपल्या फोनवर डायल करू इच्छिता?\n\n{{defaultDialInNumber}} या संमेलनासाठी फोन नंबर डायल पाहण्यासाठी या दुव्यावर क्लिक करा\n{{dialInfoPageUrl}}",
"mainText": "संमेलनात सामील होण्यासाठी खालील दुव्यावर क्लिक करा:\n{{roomUrl}}"
},
"speaker": "स्पीकर",
"speakerStats": {
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "नाव",
"seconds": "{{count}}s",
"speakerStats": "स्पीकर आकडेवारी",
"speakerTime": "स्पीकर वेळ"
},
"startupoverlay": {
"policyText": " ",
"title": "{{app}} आपला मायक्रोफोन आणि कॅमेरा वापरण्याची आवश्यकता आहे."
},
"suspendedoverlay": {
"rejoinKeyTitle": "पुन्हा जॉइन करा",
"text": " पुन्हा कनेक्ट करण्यासाठी <i>Rejoin</i> बटण दाबा.",
"title": "आपला व्हिडिओ कॉल व्यत्यय आला कारण हा संगणक झोपायला गेला."
},
"toolbar": {
"accessibilityLabel": {
},
"addPeople": "आपल्या कॉलमध्ये लोकांना जोडा",
"audioOnlyOff": "कमी बँडविड्थ मोड अक्षम करा",
"audioOnlyOn": "कमी बँडविड्थ मोड सक्षम करा",
"audioRoute": "ध्वनी यंत्र निवडा",
"authenticate": "प्रमाणित करा",
"callQuality": "व्हिडिओ गुणवत्ता व्यवस्थापित करा",
"chat": "गप्पा / बंद करा उघडा",
"closeChat": "गप्पा बंद करा",
"documentClose": "सामायिक दस्तऐवज बंद करा",
"documentOpen": "सामायिक दस्तऐवज उघडा",
"download": "आमचे अ‍ॅप्स डाउनलोड करा",
"e2ee": "एंड-टू-एंड एनक्रिप्शन",
"enterFullScreen": "पूर्ण स्क्रीन पहा",
"enterTileView": "टाइल दृश्य प्रविष्ट करा",
"exitFullScreen": "पूर्ण स्क्रीनमधून बाहेर पडा",
"exitTileView": "बाहेर पडा टाइल दृश्य",
"feedback": "अभिप्राय द्या",
"hangup": "सोडा",
"help": "मदत करा",
"invite": "लोकांना आमंत्रित करा",
"login": "लॉगिन",
"logout": "बाहेर पडणे",
"lowerYourHand": "बाहेर पडणे",
"moreActions": "अधिक क्रिया",
"moreOptions": "अधिक पर्याय",
"mute": "नि: शब्द / सशब्द करा",
"muteEveryone": "सर्वांना नि: शब्द करा",
"noAudioSignalTitle": "आपल्या माइकवरून कोणतेही इनपुट येत नाही!",
"noAudioSignalDesc": "आपण सिस्टम सेटिंग्ज किंवा हार्डवेअरवरून हेतुपुरस्सर नि: शब्द न केल्यास, डिव्हाइस बदलण्याचा विचार करा.",
"noAudioSignalDescSuggestion": "आपण सिस्टम सेटिंग्ज किंवा हार्डवेअरवरून हेतुपुरस्सर नि: शब्द न केल्यास, सूचित डिव्हाइसवर स्विच करण्याचा विचार करा.",
"noAudioSignalDialInDesc": "आपण हे वापरून डायल-इन देखील करू शकता:",
"noAudioSignalDialInLinkDesc": "डायल-इन क्रमांक",
"noisyAudioInputTitle": "आपला मायक्रोफोन गोंगाट करणारा दिसत आहे!",
"noisyAudioInputDesc": "आपला मायक्रोफोन आवाज देत असल्यासारखे दिसत आहे, कृपया डिव्हाइस नि: शब्द करणे किंवा बदलणे याचा विचार करा.",
"openChat": "खुली गप्पा",
"pip": "पिक्चर-इन-पिक्चर मोड प्रविष्ट करा",
"privateMessage": "खाजगी संदेश पाठवा",
"profile": "आपले प्रोफाइल संपादित करा",
"raiseHand": "हात वर करा / कमी करा",
"raiseYourHand": "तुझा हात वर कर",
"Settings": "सेटिंग्ज",
"sharedvideo": "एक YouTube व्हिडिओ सामायिक करा",
"shareRoom": "एखाद्यास आमंत्रित करा",
"shortcuts": "शॉर्टकट पहा",
"speakerStats": "स्पीकर आकडेवारी",
"startScreenSharing": "स्क्रीन सामायिकरण प्रारंभ करा",
"startSubtitles": "उपशीर्षके प्रारंभ करा",
"stopScreenSharing": "स्क्रीन सामायिकरण थांबवा",
"stopSubtitles": "उपशीर्षके थांबवा",
"stopSharedVideo": "YouTube व्हिडिओ थांबवा",
"talkWhileMutedPopup": "बोलण्याचा प्रयत्न करीत आहात? आपण निःशब्द आहात.",
"tileViewToggle": "टाइल दृश्य टॉगल करा",
"toggleCamera": "टॉगल कॅमेरा",
"videomute": "कॅमेरा प्रारंभ / थांबवा",
"startvideoblur": "माझी पार्श्वभूमी अस्पष्ट करा",
"stopvideoblur": "पार्श्वभूमी डाग अक्षम करा"
},
"transcribing": {
"ccButtonTooltip": "उपशीर्षके प्रारंभ / थांबवा",
"error": "लिप्यंतरण अयशस्वी. कृपया पुन्हा प्रयत्न करा.",
"expandedLabel": "लिप्यंतरण चालू आहे",
"failedToStart": "लिप्यंतरण सुरू करण्यात अयशस्वी",
"labelToolTip": "सभेचे प्रतिलेखन केले जात आहे",
"off": "लिप्यंतरण थांबविले",
"pending": "संमेलनाची नक्कल करण्याची तयारी करत आहे ...",
"start": "उपशीर्षके दर्शविणे प्रारंभ करा",
"stop": "उपशीर्षके दर्शविणे थांबवा",
"tr": "टीआर"
},
"userMedia": {
"androidGrantPermissions": "निवडा <b><i>परवानगी द्या</i></b> जेव्हा आपला ब्राउझर परवानग्या विचारतो.",
"chromeGrantPermissions": "निवडा <b><i>परवानगी द्या</i></b> जेव्हा आपला ब्राउझर परवानग्या विचारतो.",
"edgeGrantPermissions": "निवडा <b><i> होय</i></b> जेव्हा आपला ब्राउझर परवानग्या विचारतो.",
"electronGrantPermissions": "कृपया आपला कॅमेरा आणि मायक्रोफोन वापरण्यास परवानगी द्या",
"firefoxGrantPermissions": "Select <b><i>निवडलेले डिव्हाइस सामायिक करा</i></b> जेव्हा आपला ब्राउझर परवानग्या विचारतो.",
"iexplorerGrantPermissions": "निवडा <b><i>ठीक आहे</i></b> जेव्हा आपला ब्राउझर परवानग्या विचारतो.",
"nwjsGrantPermissions": "कृपया आपला कॅमेरा आणि मायक्रोफोन वापरण्यास परवानगी द्या",
"operaGrantPermissions": "निवडा <b><i>परवानगी द्या</i></b> जेव्हा आपला ब्राउझर परवानग्या विचारतो.",
"react-nativeGrantPermissions": "निवडा <b><i>परवानगी द्या</i></b>जेव्हा आपला ब्राउझर परवानग्या विचारतो.",
"safariGrantPermissions": "निवडा <b><i>ठीक आहे</i></b> जेव्हा आपला ब्राउझर परवानग्या विचारतो."
},
"videoSIPGW": {
"busy": "आम्ही स्त्रोत मुक्त करण्याचे काम करत आहोत. कृपया काही मिनिटांत पुन्हा प्रयत्न करा.",
"busyTitle": " परिषद खोलीत सेवा सध्या व्यस्त आहे",
"errorAlreadyInvited": " {{displayName}} आधीच आमंत्रित आहे",
"errorInvite": "परिषद अद्याप स्थापन केलेली नाही. कृपया पुन्हा प्रयत्न करा.",
"errorInviteFailed": "आम्ही या समस्येचे निराकरण करण्याचे काम करीत आहोत. कृपया पुन्हा प्रयत्न करा.",
"errorInviteFailedTitle": "{{displayName}} आमंत्रित करणे अयशस्वी",
"errorInviteTitle": " परिषद खोलीत आमंत्रित करताना त्रुटी",
"pending": "{{displayName}} आमंत्रित केले गेले आहे"
},
"videoStatus": {
"audioOnly": "एडीडी",
"audioOnlyExpanded": "आपण कमी बँडविड्थ मोडमध्ये आहात. या मोडमध्ये आपल्याला केवळ ऑडिओ आणि स्क्रीन सामायिकरण प्राप्त होईल.",
"callQuality": "व्हिडिओ गुणवत्ता",
"hd": "एचडी",
"hdTooltip": "उच्च परिभाषा व्हिडिओ पहात आहे",
"highDefinition": "उंच - व्याख्या",
"labelTooiltipNoVideo": "व्हिडिओ नाही",
"labelTooltipAudioOnly": "कमी बँडविड्थ मोड सक्षम",
"ld": "एलडी",
"ldTooltip": "निम्न परिभाषा व्हिडिओ पहात आहे",
"lowDefinition": "कमी व्याख्या",
"onlyAudioAvailable": "केवळ ऑडिओ उपलब्ध आहे",
"onlyAudioSupported": "आम्ही या ब्राउझरमध्ये केवळ ऑडिओचे समर्थन करतो.",
"p2pEnabled": "सरदार ते सरदार सक्षम",
"p2pVideoQualityDescription": "पीअर टू पीअर मोडमध्ये, प्राप्त व्हिडिओ गुणवत्ता केवळ उच्च आणि ऑडिओ दरम्यानच टॉगल केली जाऊ शकते. पीअर टू पीअर बाहेर येईपर्यंत इतर सेटिंग्जचा आदर केला जाणार नाही.",
"recHighDefinitionOnly": "उच्च परिभाषा पसंत करेल.",
"sd": "एसडी",
"sdTooltip": "मानक परिभाषा व्हिडिओ पहात आहे",
"standardDefinition": "मानक व्याख्या"
},
"videothumbnail": {
"domute": "नि: शब्द करा",
"domuteOthers": "इतर सर्वांना नि: शब्द करा",
"flip": "फ्लिप",
"kick": "लाथा मारून बाहेर काढ",
"moderator": "नियंत्रक",
"mute": "सहभागी निःशब्द आहे",
"muted": "नि: शब्द केलेले",
"remoteControl": "रिमोट कंट्रोल प्रारंभ / थांबवा.",
"show": "रंगमंचावर दाखवा",
"videomute": "सहभागीने कॅमेरा थांबविला आहे"
},
"welcomepage": {
"accessibilityLabel": {
"join": "सामील होण्यासाठी टॅप करा",
"roomname": "खोलीचे नाव प्रविष्ट करा"
},
"appDescription": " पुढे जा, संपूर्ण टीमसह व्हिडिओ चॅट करा. खरं तर, आपल्या ओळखीच्या प्रत्येकास आमंत्रित करा. {{app}} एक संपूर्ण एनक्रिप्टेड, 100% मुक्त स्रोत व्हिडिओ कॉन्फरन्सिंग समाधान आहे जे आपण दिवसभर, दररोज विनामूल्य वापरु शकता - कोणतेही खाते आवश्यक नाही.",
"audioVideoSwitch": {
"audio": "आवाज",
"video": "व्हिडिओ"
},
"calendar": "कॅलेंडर",
"connectCalendarButton": "आपले कॅलेंडर कनेक्ट करा",
"connectCalendarText": "आपली सर्व सभा {{app}} in मध्ये पाहण्यासाठी कॅलेंडर कनेक्ट करा. तसेच, आपल्या कॅलेंडरमध्ये {{provider}} संमेलने जोडा आणि एका क्लिकने त्या प्रारंभ करा.",
"enterRoomTitle": "नवीन बैठक सुरू करा",
"getHelp": "Get help",
"roomNameAllowedChars": "संमेलनाच्या नावात यापैकी कोणतेही वर्ण नसावेत: ?, &, :, ', \", %, #.",
"go": "GO",
"goSmall": "GO",
"join": "तयार करा / सामील व्हा",
"info": "माहिती",
"privacy": "गोपनीयता",
"recentList": "अलीकडील",
"recentListDelete": "हटवा",
"recentListEmpty": "आपली अलीकडील यादी सध्या रिक्त आहे. आपल्या कार्यसंघाशी गप्पा मारा आणि आपल्याला आपल्या सर्व अलीकडील संमेलने येथे आढळतील.",
"reducedUIText": "{{App}} वर आपले स्वागत आहे!",
"roomname": "Enter room name",
"roomnameHint": "आपण सामील होऊ इच्छित असलेल्या खोलीचे नाव किंवा URL प्रविष्ट करा. आपण नाव लिहू शकता, आपण ज्यांना भेटत आहात त्या लोकांना हे कळू द्या जेणेकरुन ते समान नाव प्रविष्ट करा.",
"sendFeedback": "अभिप्राय पाठवा",
"terms": "अटी",
"title": "सुरक्षित, पूर्णपणे वैशिष्ट्यीकृत आणि पूर्णपणे विनामूल्य व्हिडिओ कॉन्फरन्सिंग"
},
"lonelyMeetingExperience": {
"button": "इतरांना आमंत्रित करा",
"youAreAlone": "आपण सभेत एकटाच आहात"
},
"helpView": {
"header": "मदत केंद्र"
}
}

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

@@ -639,7 +639,7 @@
"raiseHand": "Podnieś / Opuść rękę",
"raiseYourHand": "Podnieś rękę",
"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",

View File

@@ -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

@@ -21,7 +21,8 @@
"bluetooth": "Bluetooth",
"headphones": "Căști",
"phone": "Telefon",
"speaker": "Difuzor"
"speaker": "Difuzor",
"none": ""
},
"audioOnly": {
"audioOnly": "Doar audio"
@@ -51,7 +52,12 @@
"popover": "Alegeți un pseudonim",
"title": "Introduceți un pseudonim pentru a conversa"
},
"title": "Apel video"
"title": "Apel video",
"you": "",
"privateNotice": "",
"noMessagesMessage": "",
"messageTo": "",
"fieldPlaceHolder": ""
},
"connectingOverlay": {
"joiningRoom": "Sunteți conectat la conversația dumneavoastră ..."
@@ -66,7 +72,11 @@
"DISCONNECTED": "Deconectat",
"DISCONNECTING": "Se deconectează",
"ERROR": "Eroare",
"RECONNECTING": "A apărut o eroare de rețea. Reconectare..."
"RECONNECTING": "A apărut o eroare de rețea. Reconectare...",
"LOW_BANDWIDTH": "",
"GOT_SESSION_ID": "",
"GET_SESSION_ID_ERROR": "",
"FETCH_SESSION_ID": ""
},
"connectionindicator": {
"address": "Adresă:",
@@ -97,7 +107,8 @@
"status": "Conexiune:",
"transport": "Mod Transport:",
"transport_plural": "Moduri Transport:",
"turn": " (turn)"
"turn": " (turn)",
"e2e_rtt": ""
},
"dateUtils": {
"earlier": "Mai devreme",
@@ -109,6 +120,8 @@
"description": "Nu s-a întâmplat nimic? Am încercat să vă deschidem conversația în {{app}} aplicația pentru desktop. Încercați din nou sau deschideți {{app}} aplicația web.",
"descriptionWithoutWeb": "",
"downloadApp": "Descărcați aplicația",
"ifDoNotHaveApp": "Dacă nu aveti încă aplicația atunci:",
"ifHaveApp": "Dacă aveti deja aplicația:",
"launchWebButton": "Deschideți în browser",
"openApp": "Continuați spre aplicație",
"title": "Deschidere apel video în {{app}}...",
@@ -256,13 +269,24 @@
"WaitForHostMsgWOk": "Conferința {{room}} nu a început. Daca sunteți moderatorul, apăsați butonul OK pentru autentificare. Dacă nu, așteptați ca moderatorul să înceapă conferința.",
"WaitingForHost": "Așteptare moderator conferință ...",
"Yes": "Da",
"yourEntireScreen": "Întregul ecran"
"yourEntireScreen": "Întregul ecran",
"sendPrivateMessageTitle": "",
"sendPrivateMessageOk": "",
"sendPrivateMessageCancel": "",
"sendPrivateMessage": "",
"screenSharingAudio": "",
"muteEveryoneStartMuted": "",
"muteEveryoneSelf": "",
"muteEveryoneTitle": "",
"muteEveryoneDialog": "",
"muteEveryoneElseTitle": "",
"muteEveryoneElseDialog": ""
},
"dialOut": {
"statusMessage": "Este {{status}}"
},
"feedback": {
"average": "Mediu",
"average": "Medie",
"bad": "Rău",
"detailsLabel": "Spuneți-ne mai multe despre experiența dumneavoastră.",
"good": "Bine",
@@ -335,7 +359,8 @@
"toggleFilmstrip": "Afișați sau ascundeți imagini video",
"toggleScreensharing": "Comutați între cameră și partajare ecran",
"toggleShortcuts": "Arătați sau ascundeți comenzi rapide tastatură",
"videoMute": "Porniți sau opriți camera"
"videoMute": "Porniți sau opriți camera",
"videoQuality": ""
},
"liveStreaming": {
"busy": "Lucrăm la eliberarea resurselor de transmitere. Vă rugam să încercați din nou în câteva minute.",
@@ -363,7 +388,11 @@
"signOut": "Deconectare",
"start": "Începeți o transmitere live",
"streamIdHelp": "Ce înseamnă acest lucru?",
"unavailableTitle": "Transmitere live indisponibilă"
"unavailableTitle": "Transmitere live indisponibilă",
"onBy": "",
"offBy": "",
"googlePrivacyPolicy": "Politica de confidențialitate Google",
"youtubeTerms": "Termeni și condiții Youtube"
},
"localRecording": {
"clientState": {
@@ -426,9 +455,10 @@
"unmute": "",
"newDeviceCameraTitle": "A fost detectată o cameră noua",
"newDeviceAudioTitle": "A fost detectat un dispozitiv audio nou",
"newDeviceAction": "Utilizați"
"newDeviceAction": "Utilizați",
"suboptimalBrowserWarning": "Folosind acest browser nu veți beneficia de cea mai bună experiență pentru aceste apeluri video. În timp ce lucrăm la asta, vă recomandăm să folosiți unul din <a href='{{recommendedBrowserPageLink}}' target='_blank'>browser-ele suportate</a>."
},
"passwordSetRemotely": "Setat de un alt membru",
"passwordSetRemotely": "Setată de un alt membru",
"passwordDigitsOnly": "Până la {{number}} cifre",
"poweredby": "cu sprijinul",
"presenceStatus": {
@@ -474,7 +504,9 @@
"signIn": "Conectare",
"signOut": "Deconectare",
"unavailable": "Oops! Serviciul {{serviceName}} este indisponibil momentan. Se lucrează la remedierea acestei probleme. Vă rugam să încercați mai tărziu.",
"unavailableTitle": "Înregistrare indisponibilă"
"unavailableTitle": "Înregistrare indisponibilă",
"onBy": "{{name}} a pornit înregistrarea",
"offBy": "{{name}} a oprit înregistrarea"
},
"sectionList": {
"pullToRefresh": "Trageți pentru a reîmprospătă"
@@ -499,8 +531,10 @@
"selectCamera": "Cameră",
"selectMic": "Microfon",
"startAudioMuted": "Toată lumea începe cu sunetul dezactivat",
"startVideoMuted": "Toată lumea începe cu sunetul dezactivat",
"title": "Setări"
"startVideoMuted": "Toată lumea începe cu fară video",
"title": "Setări",
"speakers": "Difuzoare",
"microphones": "Microfoane"
},
"settingsView": {
"alertOk": "OK",
@@ -515,7 +549,11 @@
"serverURL": "Server URL",
"startWithAudioMuted": "Începeți cu sunetul dezactivat",
"startWithVideoMuted": "Începeți cu video dezactivat",
"version": "Version"
"version": "Version",
"showAdvanced": "Arată setările avansate",
"disableP2P": "Dezactivează modul Peer-To-Peer",
"disableCallIntegration": "Dezactivează integrarea cu apelurile native",
"advanced": "Avansat"
},
"share": {
"dialInfoText": "\n\n=====\n\nVreti doar să apelați telefonic?\n\n{{defaultDialInNumber}}Faceți click pe acest link pentru a vizualiza numerele pentru apelare în acest apel video\n{{dialInfoPageUrl}}",
@@ -525,10 +563,10 @@
"speakerStats": {
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "Name",
"name": "Nume",
"seconds": "{{count}}s",
"speakerStats": "Parametrii difuzorului",
"speakerTime": "Durată participant"
"speakerStats": "Statistici participanți",
"speakerTime": "Durată vorbire participant"
},
"startupoverlay": {
"policyText": " ",
@@ -572,9 +610,14 @@
"tileView": "Afișați/ascundeți miniatura video",
"toggleCamera": "Afișați / ascundeți camera",
"videomute": "Activați / dezactivați înregistrarea",
"videoblur": ""
"videoblur": "",
"privateMessage": "Trimite un mesaj privat",
"muteEveryone": "Oprește microfonul tuturor",
"moreOptions": "Arată mai multe opțiuni",
"help": "Ajutor",
"download": "Descarcă aplicațiile noastre"
},
"addPeople": "Adaugați persoane în apel",
"addPeople": "Adăugați persoane în apel",
"audioOnlyOff": "Dezactivați modul 'doar audio'",
"audioOnlyOn": "Activați modul 'doar audio'",
"audioRoute": "Selectați dispozitivul pentru sunet",
@@ -664,9 +707,6 @@
"lowDefinition": "Calitate redusă",
"onlyAudioAvailable": "Doar audio este disponibil",
"onlyAudioSupported": "În acest navigator este suportat doar 'mod audio'.",
"p2pEnabled": "Peer-to-Peer activat",
"p2pVideoQualityDescription": "În modul peer-to-peer pentru calitatea apelurilor primite puteți alege doar între calitate superioară sau 'mod audio'. Alte setări nu pot fi activate până când modul peer-to-peer nu este dezactivat.",
"recHighDefinitionOnly": "Este de preferat o calitate superioară.",
"sd": "SD",
"standardDefinition": "Calitate standard"
},
@@ -698,7 +738,7 @@
"go": "ÎNCEPEȚI",
"join": "ACCESARE",
"info": "Informații",
"privacy": "Securitate",
"privacy": "Confidențialitate",
"recentList": "Recent",
"recentListDelete": "Ștergeți",
"recentListEmpty": "Lista dumneavoastră recentă este momentan goală. Discutați cu echipa dumneavoastră și veți găsi toate conversațiile aici.",
@@ -707,13 +747,16 @@
"roomnameHint": "Introduceți numele sau adresa web a ședinței la care doriți să vă conectați. Puteți asocia un nume, dar transmiteți și celorlalți participanți acest nume.",
"sendFeedback": "Lăsați-ne feedback",
"terms": "Termeni",
"title": "Video-conferință securizata, cu opțiuni multiple și complet gratuită "
"title": "Video-conferință securizată, cu multiple funcționalități și complet gratuită"
},
"lonelyMeetingExperience": {
"button": "Invită alte persoane",
"youAreAlone": "Ești singura persoană din acest apel"
"documentSharing": {
"title": ""
},
"helpView": {
"header": "Centru de ajutor"
}
"defaultNickname": "",
"chromeExtensionBanner": {
"dontShowAgain": "",
"buttonText": "",
"installExtensionText": ""
},
"raisedHand": "Ar dori să vorbească"
}

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",
@@ -227,18 +249,23 @@
"remoteControlStopMessage": "Uzaktan kontrol oturumu sona erdi!",
"remoteControlTitle": "Uzak masaüstü kontrolü",
"Remove": "Kaldır",
"removePassword": "Şifreyi kaldır",
"removePassword": "Parolayı kaldır",
"removeSharedVideoMsg": "Paylaşılan videonuzu kaldırmak istediğinizden emin misiniz?",
"removeSharedVideoTitle": "Paylaşılan videoyu kaldır",
"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ü",
@@ -289,8 +326,8 @@
},
"info": {
"accessibilityLabel": "Bilgiyi göster",
"addPassword": "Şifre ekle",
"cancelPassword": "Şifreyi iptal et",
"addPassword": "Parola ekle",
"cancelPassword": "Parolayı iptal et",
"conferenceURL": "Bağlantı:",
"country": "Ülke",
"dialANumber": "Toplantınıza katılmak için bu numaralardan birini çevirin ve ardından kodu girin.",
@@ -312,7 +349,7 @@
"noPassword": "Yok",
"noRoom": "Aranacak oda belirtilmedi.",
"numbers": "Arama Numaraları",
"password": "Şifre:",
"password": "Parola:",
"title": "Paylaş",
"tooltip": "Bu toplantı için bağlantıyı ve arama bilgilerini paylaşın",
"label": "Toplantı bilgileri"
@@ -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": {
@@ -424,23 +468,64 @@
"muted": "Görüşmeye sesiniz kapalı olarak başladınız.",
"mutedTitle": "Sesiniz kapalı!",
"mutedRemotelyTitle": "{{participantDisplayName}} tarafından sessize alındınız!",
"mutedRemotelyDescription": "",
"passwordRemovedRemotely": "",
"passwordSetRemotely": "",
"raisedHand": "{{name}} konuşmak istiyor.",
"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}} söz hakkı istiyor.",
"somebody": "Birisi",
"startSilentTitle": "",
"startSilentDescription": "",
"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'>fully supported browsers</a>.",
"startSilentTitle": "Ses çıkışı olmadan bağlandınız",
"startSilentDescription": "Ses çıkışını açtıktan sonra tekrar bağlanın",
"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": "",
"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",
@@ -577,7 +685,7 @@
"shareRoom": "Birini davet et",
"shareYourScreen": "Ekran paylaşımını aç/kapat",
"shortcuts": "Kısayolları aç/kapat",
"show": "",
"show": "Sahnede göster",
"speakerStats": "Konuşmacı istatistiklerini aç/kapat",
"tileView": "Döşeme görünümünü aç/kapat",
"toggleCamera": "Kamerayı 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

@@ -110,6 +110,7 @@
"localaddress_plural": "Local addresses:",
"localport": "Local port:",
"localport_plural": "Local ports:",
"maxEnabledResolution": "send max",
"more": "Show more",
"packetloss": "Packet loss:",
"quality": {
@@ -193,21 +194,20 @@
"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.",
@@ -216,6 +216,7 @@
"kickParticipantTitle": "Kick this participant?",
"kickTitle": "Ouch! {{participantDisplayName}} kicked you out of the meeting",
"liveStreaming": "Live Streaming",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Not possible while recording is active",
"liveStreamingDisabledForGuestTooltip": "Guests can't start live streaming.",
"liveStreamingDisabledTooltip": "Start live stream disabled.",
"lockMessage": "Failed to lock the conference.",
@@ -248,7 +249,9 @@
"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.",
"recordingDisabledTooltip": "Start recording disabled.",
"rejoinNow": "Rejoin now",
@@ -267,11 +270,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",
@@ -393,6 +394,8 @@
"videoQuality": "Manage call quality"
},
"liveStreaming": {
"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>.",
"limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.",
"busy": "We're working on freeing streaming resources. Please try again in a few minutes.",
"busyTitle": "All streamers are currently busy",
"changeSignIn": "Switch accounts.",
@@ -498,6 +501,7 @@
"audioAndVideoError": "Audio and video error:",
"audioOnlyError": "Audio error:",
"audioTrackError": "Could not create audio track.",
"calling": "Calling",
"callMe": "Call me",
"callMeAtNumber": "Call me at this number:",
"configuringDevices": "Configuring devices...",
@@ -521,7 +525,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:",
@@ -550,6 +555,8 @@
},
"raisedHand": "Would like to speak",
"recording": {
"limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}</3>.",
"authDropboxText": "Upload to Dropbox",
"availableSpace": "Available space: {{spaceLeft}} MB (approximately {{duration}} minutes of recording)",
"beta": "BETA",
@@ -580,8 +587,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": {
@@ -665,10 +673,12 @@
"e2ee": "End-to-End Encryption",
"feedback": "Leave feedback",
"fullScreen": "Toggle full screen",
"grantModerator": "Grant Moderator",
"hangup": "Leave the call",
"help": "Help",
"invite": "Invite people",
"kick": "Kick participant",
"lobbyButton": "Enable/disable lobby mode",
"localRecording": "Toggle local recording controls",
"lockRoom": "Toggle meeting password",
"moreActions": "Toggle more actions menu",
@@ -716,6 +726,8 @@
"hangup": "Leave",
"help": "Help",
"invite": "Invite people",
"lobbyButtonDisable": "Disable lobby mode",
"lobbyButtonEnable": "Enable lobby mode",
"login": "Login",
"logout": "Logout",
"lowerYourHand": "Lower your hand",
@@ -810,6 +822,7 @@
"domute": "Mute",
"domuteOthers": "Mute everyone else",
"flip": "Flip",
"grantModerator": "Grant Moderator",
"kick": "Kick out",
"moderator": "Moderator",
"mute": "Participant is muted",
@@ -833,16 +846,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",
@@ -855,5 +869,38 @@
},
"helpView": {
"header": "Help center"
},
"lobby": {
"knockingParticipantList": "Knocking participant list",
"allow": "Allow",
"backToKnockModeButton": "No password, ask to join instead",
"dialogTitle": "Lobby mode",
"disableDialogContent": "Lobby mode is currently enabled. This feature ensures that unwanted participants can't join your meeting. Do you want to disable it?",
"disableDialogSubmit": "Disable",
"emailField": "Enter your email address",
"enableDialogPasswordField": "Set password (optional)",
"enableDialogSubmit": "Enable",
"enableDialogText": "Lobby mode lets you protect your meeting by only allowing people to enter after a formal approval by a moderator.",
"enterPasswordButton": "Enter meeting password",
"enterPasswordTitle": "Enter password to join meeting",
"invalidPassword": "Invalid password",
"joiningMessage": "You'll join the meeting as soon as someone accepts your request",
"joinWithPasswordMessage": "Trying to join with password, please wait...",
"joinRejectedMessage": "Your join request was rejected by a moderator.",
"joinTitle": "Join Meeting",
"joiningTitle": "Asking to join meeting...",
"joiningWithPasswordTitle": "Joining with password...",
"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",
"toggleLabel": "Enable lobby"
}
}

View File

@@ -8,16 +8,21 @@ import {
sendAnalytics
} from '../../react/features/analytics';
import {
getCurrentConference,
sendTones,
setPassword,
setSubject
} from '../../react/features/base/conference';
import { parseJWTFromURLParams } from '../../react/features/base/jwt';
import { JitsiRecordingConstants } from '../../react/features/base/lib-jitsi-meet';
import {
processExternalDeviceRequest
} from '../../react/features/device-selection/functions';
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';
import { setE2EEKey } from '../../react/features/e2ee';
import { invite } from '../../react/features/invite';
import { RECORDING_TYPES } from '../../react/features/recording/constants';
import { getActiveSession } from '../../react/features/recording/functions';
import { muteAllParticipants } from '../../react/features/remote-video-menu/actions';
import { toggleTileView } from '../../react/features/video-layout';
import { setVideoQuality } from '../../react/features/video-quality';
@@ -190,6 +195,114 @@ function initCommands() {
logger.debug('Set video quality command received');
sendAnalytics(createApiEvent('set.video.quality'));
APP.store.dispatch(setVideoQuality(frameHeight));
},
/**
* Starts a file recording or streaming depending on the passed on params.
* For youtube streams, `youtubeStreamKey` must be passed on. `youtubeBroadcastID` is optional.
* For dropbox recording, recording `mode` should be `file` and a dropbox oauth2 token must be provided.
* For file recording, recording `mode` should be `file` and optionally `shouldShare` could be passed on.
* No other params should be passed.
*
* @param { string } arg.mode - Recording mode, either `file` or `stream`.
* @param { string } arg.dropboxToken - Dropbox oauth2 token.
* @param { boolean } arg.shouldShare - Whether the recording should be shared with the participants or not.
* Only applies to certain jitsi meet deploys.
* @param { string } arg.youtubeStreamKey - The youtube stream key.
* @param { string } arg.youtubeBroadcastID - The youtube broacast ID.
* @returns {void}
*/
'start-recording': ({ mode, dropboxToken, shouldShare, youtubeStreamKey, youtubeBroadcastID }) => {
const state = APP.store.getState();
const conference = getCurrentConference(state);
if (!conference) {
logger.error('Conference is not defined');
return;
}
if (dropboxToken && !isDropboxEnabled(state)) {
logger.error('Failed starting recording: dropbox is not enabled on this deployment');
return;
}
if (mode === JitsiRecordingConstants.mode.STREAM && !youtubeStreamKey) {
logger.error('Failed starting recording: missing youtube stream key');
return;
}
let recordingConfig;
if (mode === JitsiRecordingConstants.mode.FILE) {
if (dropboxToken) {
recordingConfig = {
mode: JitsiRecordingConstants.mode.FILE,
appData: JSON.stringify({
'file_recording_metadata': {
'upload_credentials': {
'service_name': RECORDING_TYPES.DROPBOX,
'token': dropboxToken
}
}
})
};
} else {
recordingConfig = {
mode: JitsiRecordingConstants.mode.FILE,
appData: JSON.stringify({
'file_recording_metadata': {
'share': shouldShare
}
})
};
}
} else if (mode === JitsiRecordingConstants.mode.STREAM) {
recordingConfig = {
broadcastId: youtubeBroadcastID,
mode: JitsiRecordingConstants.mode.STREAM,
streamId: youtubeStreamKey
};
} else {
logger.error('Invalid recording mode provided');
return;
}
conference.startRecording(recordingConfig);
},
/**
* Stops a recording or streaming in progress.
*
* @param {string} mode - `file` or `stream`.
* @returns {void}
*/
'stop-recording': mode => {
const state = APP.store.getState();
const conference = getCurrentConference(state);
if (!conference) {
logger.error('Conference is not defined');
return;
}
if (![ JitsiRecordingConstants.mode.FILE, JitsiRecordingConstants.mode.STREAM ].includes(mode)) {
logger.error('Invalid recording mode provided!');
return;
}
const activeSession = getActiveSession(state, mode);
if (activeSession && activeSession.id) {
conference.stopRecording(activeSession.id);
} else {
logger.error('No recording or streaming session found');
}
}
};
transport.on('event', ({ data, name }) => {
@@ -255,6 +368,9 @@ function initCommands() {
case 'is-video-available':
callback(videoAvailable);
break;
case 'is-sharing-screen':
callback(Boolean(APP.conference.isSharingScreen));
break;
default:
return false;
}
@@ -514,7 +630,8 @@ class API {
notifyDeviceListChanged(devices: Object) {
this._sendEvent({
name: 'device-list-changed',
devices });
devices
});
}
/**

View File

@@ -37,6 +37,8 @@ const commands = {
sendEndpointTextMessage: 'send-endpoint-text-message',
sendTones: 'send-tones',
setVideoQuality: 'set-video-quality',
startRecording: 'start-recording',
stopRecording: 'stop-recording',
subject: 'subject',
submitFeedback: 'submit-feedback',
toggleAudio: 'toggle-audio',
@@ -758,6 +760,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

@@ -98,19 +98,6 @@ UI.notifyReservationError = function(code, msg) {
});
};
/**
* Notify user that conference was destroyed.
* @param reason {string} the reason text
*/
UI.notifyConferenceDestroyed = function(reason) {
// FIXME: use Session Terminated from translation, but
// 'reason' text comes from XMPP packet and is not translated
messageHandler.showError({
description: reason,
titleKey: 'dialog.sessTerminated'
});
};
/**
* Change nickname for the user.
* @param {string} id user id
@@ -566,82 +553,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';

View File

@@ -31,7 +31,7 @@ export const SHARED_VIDEO_CONTAINER_TYPE = 'sharedvideo';
* Example shared video link.
* @type {string}
*/
const defaultSharedVideoLink = 'https://www.youtube.com/watch?v=xNXN7CZk8X0';
const defaultSharedVideoLink = 'https://youtu.be/TB7LlM4erx8';
const updateInterval = 5000; // milliseconds
/**

View File

@@ -1,7 +1,7 @@
/* global $, APP */
import { jitsiLocalStorage } from '@jitsi/js-utils';
import Logger from 'jitsi-meet-logger';
import { jitsiLocalStorage } from 'js-utils';
import {
NOTIFICATION_TIMEOUT,

View File

@@ -12,6 +12,7 @@ import {
JitsiParticipantConnectionStatus
} from '../../../react/features/base/lib-jitsi-meet';
import { VIDEO_TYPE } from '../../../react/features/base/media';
import { CHAT_SIZE } from '../../../react/features/chat';
import {
updateKnownLargeVideoResolution
} from '../../../react/features/large-video';
@@ -323,7 +324,18 @@ export default class LargeVideoManager {
* Update container size.
*/
updateContainerSize() {
this.width = UIUtil.getAvailableVideoWidth();
let widthToUse = UIUtil.getAvailableVideoWidth();
const { isOpen } = APP.store.getState()['features/chat'];
if (isOpen) {
/**
* If chat state is open, we re-compute the container width
* by subtracting the default width of the chat.
*/
widthToUse -= CHAT_SIZE;
}
this.width = widthToUse;
this.height = window.innerHeight;
}

View File

@@ -276,9 +276,12 @@ export default class LocalVideo extends SmallVideo {
// Ensure the video gets play() called on it. This may be necessary in the
// case where the local video container was moved and re-attached, in which
// case video does not autoplay.
// case video does not autoplay. Also, set the playsinline attribute on the
// video element so that local video doesn't open in full screen by default
// in Safari browser on iOS.
const video = this.container.querySelector('video');
video && video.setAttribute('playsinline', 'true');
video && !config.testing?.noAutoPlayVideo && video.play();
}
}

View File

@@ -498,9 +498,6 @@ export class VideoContainer extends LargeContainer {
});
this._updateBackground();
// Reset the large video background depending on the stream.
this.setLargeVideoBackground(this.avatarDisplayed);
}
/**
@@ -533,14 +530,6 @@ export class VideoContainer extends LargeContainer {
* @param {boolean} show
*/
showAvatar(show) {
// TO FIX: Video background need to be black, so that we don't have a
// flickering effect when scrolling between videos and have the screen
// move to grey before going back to video. Avatars though can have the
// default background set.
// In order to fix this code we need to introduce video background or
// find a workaround for the video flickering.
this.setLargeVideoBackground(show);
this.$avatar.css('visibility', show ? 'visible' : 'hidden');
this.avatarDisplayed = show;
@@ -596,21 +585,6 @@ export class VideoContainer extends LargeContainer {
return false;
}
/**
* Sets the large video container background depending on the container
* type and the parameter indicating if an avatar is currently shown on
* large.
*
* @param {boolean} isAvatar - Indicates if the avatar is currently shown
* on the large video.
* @returns {void}
*/
setLargeVideoBackground(isAvatar) {
$('#largeVideoContainer').css('background',
this.videoType === VIDEO_CONTAINER_TYPE && !isAvatar
? '#000' : interfaceConfig.DEFAULT_BACKGROUND);
}
/**
* Callback invoked when the video element changes dimensions.
*

View File

@@ -1,6 +1,6 @@
// FIXME: change to '../API' when we update to webpack2. If we do this now all
// files from API modules will be included in external_api.js.
import { PostMessageTransportBackend, Transport } from 'js-utils/transport';
import { PostMessageTransportBackend, Transport } from '@jitsi/js-utils/transport';
import { getJitsiMeetGlobalNS } from '../../react/features/base/util';
import { API_ID } from '../API/constants';

4541
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -32,6 +32,7 @@
"@atlaskit/theme": "7.0.2",
"@atlaskit/toggle": "5.0.14",
"@atlaskit/tooltip": "12.1.13",
"@jitsi/js-utils": "1.0.0",
"@microsoft/microsoft-graph-client": "1.1.0",
"@react-native-community/async-storage": "1.3.4",
"@react-native-community/google-signin": "3.0.1",
@@ -50,15 +51,14 @@
"i18next-xhr-backend": "3.0.0",
"jQuery-Impromptu": "github:trentrichardson/jQuery-Impromptu#v6.0.0",
"jitsi-meet-logger": "github:jitsi/jitsi-meet-logger#5ec92357570dc8f0b7ffc1528820721c84c6af8b",
"jquery": "3.4.0",
"jquery": "3.5.1",
"jquery-contextmenu": "2.4.5",
"jquery-i18next": "1.2.1",
"js-md5": "0.6.1",
"js-utils": "github:jitsi/js-utils#cf11996bd866fdb47326c59a5d3bc24be17282d4",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#c94f6a570f69ebfe18de6c1549cc76370c791468",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#ff1813cbb2e7d36f1cc0bbc2b8baa0a16c6346a4",
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
"lodash": "4.17.13",
"lodash": "4.17.19",
"moment": "2.19.4",
"moment-duration-format": "2.2.2",
"pixelmatch": "5.1.0",
@@ -69,7 +69,7 @@
"react-linkify": "1.0.0-alpha",
"react-native": "github:jitsi/react-native#efd2aff5661d75a230e36406b698cfe0ee545be2",
"react-native-background-timer": "2.1.1",
"react-native-calendar-events": "github:jitsi/react-native-calendar-events#902e6e92d6bae450a6052f76ba4d02f977ffd8f2",
"react-native-calendar-events": "github:jitsi/react-native-calendar-events#928a80e2ffef0d7e84936d7e7e0acc4f53ee8470",
"react-native-callstats": "3.61.0",
"react-native-collapsible": "1.5.1",
"react-native-default-preference": "1.4.2",
@@ -80,15 +80,17 @@
"react-native-svg": "9.7.1",
"react-native-svg-transformer": "0.13.0",
"react-native-swipeout": "2.3.6",
"react-native-watch-connectivity": "0.2.0",
"react-native-webrtc": "1.75.3",
"react-native-watch-connectivity": "0.4.3",
"react-native-webrtc": "1.84.0",
"react-native-webview": "7.4.1",
"react-native-youtube-iframe": "1.2.3",
"react-redux": "7.1.0",
"react-textarea-autosize": "7.1.0",
"react-transition-group": "2.4.0",
"redux": "4.0.4",
"redux-thunk": "2.2.0",
"rnnoise-wasm": "github:jitsi/rnnoise-wasm.git#db96d11f175a22ef56c7db1ba9550835b716e615",
"rnnoise-wasm": "github:jitsi/rnnoise-wasm.git#566a16885897704d6e6d67a1d5ac5d39781db2af",
"rtcstats": "github:jitsi/rtcstats#v6.1.3",
"styled-components": "3.4.9",
"util": "0.12.1",
"uuid": "3.1.0",
@@ -110,8 +112,9 @@
"@babel/runtime": "7.5.5",
"babel-eslint": "10.0.1",
"babel-loader": "8.0.4",
"clean-css": "3.4.25",
"css-loader": "0.28.7",
"circular-dependency-plugin": "5.2.0",
"clean-css-cli": "4.3.0",
"css-loader": "3.6.0",
"eslint": "5.6.1",
"eslint-config-jitsi": "github:jitsi/eslint-config-jitsi#1.0.3",
"eslint-plugin-flowtype": "2.50.3",
@@ -124,14 +127,14 @@
"imports-loader": "0.7.1",
"jetifier": "1.6.4",
"metro-react-native-babel-preset": "0.56.0",
"node-sass": "4.13.1",
"node-sass": "4.14.1",
"string-replace-loader": "2.1.1",
"style-loader": "0.19.0",
"unorm": "1.6.0",
"webpack": "4.27.1",
"webpack": "4.43.0",
"webpack-bundle-analyzer": "3.4.1",
"webpack-cli": "3.1.2",
"webpack-dev-server": "3.8.2"
"webpack-cli": "3.3.11",
"webpack-dev-server": "3.11.0"
},
"engines": {
"node": ">=8.0.0",

View File

@@ -538,6 +538,26 @@ export function createRemoteVideoMenuButtonEvent(buttonName, attributes) {
};
}
/**
* The rtcstats websocket onclose event. We send this to amplitude in order
* to detect trace ws prematurely closing.
*
* @param {Object} closeEvent - The event with which the websocket closed.
* @returns {Object} The event in a format suitable for sending via
* sendAnalytics.
*/
export function createRTCStatsTraceCloseEvent(closeEvent) {
const event = {
action: 'trace.onclose',
source: 'rtcstats'
};
event.code = closeEvent.code;
event.reason = closeEvent.reason;
return event;
}
/**
* Creates an event indicating that an action related to video blur
* occurred (e.g. It was started or stopped).

View File

@@ -1,5 +1,6 @@
// @flow
import { API_ID } from '../../../modules/API';
import {
checkChromeExtensionsInstalled,
isMobileBrowser
@@ -29,6 +30,16 @@ export function sendAnalytics(event: Object) {
}
}
/**
* Return saved amplitude identity info such as session id, device id and user id. We assume these do not change for
* the duration of the conference.
*
* @returns {Object}
*/
export function getAmplitudeIdentity() {
return analytics.amplitudeIdentityProps;
}
/**
* Resets the analytics adapter to its initial state - removes handlers, cache,
* disabled state, etc.
@@ -91,6 +102,8 @@ export function createHandlers({ getState }: { getState: Function }) {
try {
const amplitude = new AmplitudeHandler(handlerConstructorOptions);
analytics.amplitudeIdentityProps = amplitude.getIdentityProps();
handlers.push(amplitude);
// eslint-disable-next-line no-empty
} catch (e) {}
@@ -116,7 +129,9 @@ export function createHandlers({ getState }: { getState: Function }) {
})
.catch(e => {
analytics.dispose();
logger.error(e);
if (handlers.length !== 0) {
logger.error(e);
}
return [];
}));
@@ -155,6 +170,12 @@ export function initAnalytics({ getState }: { getState: Function }, handlers: Ar
// Report if user is using websocket
permanentProperties.websocket = navigator.product !== 'ReactNative' && typeof config.websocket === 'string';
// permanentProperties is external api
permanentProperties.externalApi = typeof API_ID === 'number';
// Report if we are loaded in iframe
permanentProperties.inIframe = _inIframe();
// Optionally, include local deployment information based on the
// contents of window.config.deploymentInfo.
if (deploymentInfo) {
@@ -184,6 +205,24 @@ export function initAnalytics({ getState }: { getState: Function }, handlers: Ar
}
}
/**
* Checks whether we are loaded in iframe.
*
* @returns {boolean} Returns {@code true} if loaded in iframe.
* @private
*/
function _inIframe() {
if (navigator.product === 'ReactNative') {
return false;
}
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
/**
* Tries to load the scripts for the analytics handlers and creates them.
*

View File

@@ -65,4 +65,17 @@ export default class AmplitudeHandler extends AbstractHandler {
this._extractName(event),
event);
}
/**
* Return amplitude identity information.
*
* @returns {Object}
*/
getIdentityProps() {
return {
sessionId: amplitude.getInstance(this._amplitudeOptions).getSessionId(),
deviceId: amplitude.getInstance(this._amplitudeOptions).options.deviceId,
userId: amplitude.getInstance(this._amplitudeOptions).options.userId
};
}
}

View File

@@ -1,5 +1,2 @@
export * from './AnalyticsEvents';
export * from './functions';
import './middleware';
import './reducer';

View File

@@ -23,7 +23,7 @@ import {
parseURIString,
toURLString
} from '../base/util';
import { showNotification } from '../notifications';
import { clearNotifications, showNotification } from '../notifications';
import { setFatalError } from '../overlay';
import {
@@ -79,6 +79,10 @@ export function appNavigate(uri: ?string) {
dispatch(disconnect());
}
// There are notifications now that gets displayed after we technically left
// the conference, but we're still on the conference screen.
dispatch(clearNotifications());
dispatch(configWillLoad(locationURL, room));
let protocol = location.protocol.toLowerCase();

View File

@@ -3,11 +3,8 @@
import React, { Fragment } from 'react';
import { BaseApp } from '../../base/app';
import '../../base/lastn'; // Register lastN middleware
import { toURLString } from '../../base/util';
import '../../follow-me';
import { OverlayContainer } from '../../overlay';
import '../../rejoin'; // Enable rejoin analytics
import { appNavigate } from '../actions';
import { getDefaultURL } from '../functions';

View File

@@ -2,32 +2,21 @@
import React from 'react';
import '../../analytics';
import '../../authentication';
import { setColorScheme } from '../../base/color-scheme';
import { DialogContainer } from '../../base/dialog';
import { CALL_INTEGRATION_ENABLED, updateFlags } from '../../base/flags';
import '../../base/jwt';
import { CALL_INTEGRATION_ENABLED, SERVER_URL_CHANGE_ENABLED, updateFlags } from '../../base/flags';
import { Platform } from '../../base/react';
import '../../base/responsive-ui';
import { DimensionsDetector, clientResized } from '../../base/responsive-ui';
import { updateSettings } from '../../base/settings';
import '../../google-api';
import '../../mobile/audio-mode';
import '../../mobile/back-button';
import '../../mobile/background';
import '../../mobile/call-integration';
import '../../mobile/external-api';
import '../../mobile/full-screen';
import '../../mobile/permissions';
import '../../mobile/picture-in-picture';
import '../../mobile/proximity';
import '../../mobile/wake-lock';
import '../../mobile/watchos';
import logger from '../logger';
import { AbstractApp } from './AbstractApp';
import type { Props as AbstractAppProps } from './AbstractApp';
// Register middlewares and reducers.
import '../middlewares';
import '../reducers';
declare var __DEV__;
/**
@@ -78,6 +67,9 @@ export class App extends AbstractApp {
// This will effectively kill the app. In accord with the Web, do not
// kill the app.
this._maybeDisableExceptionsManager();
// Bind event handler so it is only bound once per instance.
this._onDimensionsChanged = this._onDimensionsChanged.bind(this);
}
/**
@@ -94,6 +86,20 @@ export class App extends AbstractApp {
// We set these early enough so then we avoid any unnecessary re-renders.
const { dispatch } = this.state.store;
// Check if serverURL is configured externally and not allowed to change.
const serverURLChangeEnabled = this.props.flags[SERVER_URL_CHANGE_ENABLED];
if (!serverURLChangeEnabled) {
// As serverURL is provided externally, so we push it to settings.
if (typeof this.props.url !== 'undefined') {
const { serverURL } = this.props.url;
if (typeof serverURL !== 'undefined') {
dispatch(updateSettings({ serverURL }));
}
}
}
dispatch(setColorScheme(this.props.colorScheme));
dispatch(updateFlags(this.props.flags));
dispatch(updateSettings(this.props.userInfo || {}));
@@ -107,6 +113,21 @@ export class App extends AbstractApp {
});
}
/**
* Overrides the parent method to inject {@link DimensionsDetector} as
* the top most component.
*
* @override
*/
_createMainElement(component, props) {
return (
<DimensionsDetector
onDimensionsChanged = { this._onDimensionsChanged }>
{ super._createMainElement(component, props) }
</DimensionsDetector>
);
}
/**
* Attempts to disable the use of React Native
* {@link ExceptionsManager#handleException} on platforms and in
@@ -144,6 +165,22 @@ export class App extends AbstractApp {
}
}
_onDimensionsChanged: (width: number, height: number) => void;
/**
* Updates the known available size for the app to occupy.
*
* @param {number} width - The component's current width.
* @param {number} height - The component's current height.
* @private
* @returns {void}
*/
_onDimensionsChanged(width: number, height: number) {
const { dispatch } = this.state.store;
dispatch(clientResized(width, height));
}
/**
* Renders the platform specific dialog container.
*

View File

@@ -5,19 +5,13 @@ import React from 'react';
import { DialogContainer } from '../../base/dialog';
import { ChromeExtensionBanner } from '../../chrome-extension-banner';
import '../../base/user-interaction';
import '../../chat';
import '../../external-api';
import '../../no-audio-signal';
import '../../noise-detection';
import '../../power-monitor';
import '../../room-lock';
import '../../talk-while-muted';
import '../../video-layout';
import '../../old-client-notification';
import { AbstractApp } from './AbstractApp';
// Register middlewares and reducers.
import '../middlewares';
import '../reducers';
/**
* Root app {@code Component} on Web/React.
*

View File

@@ -1,6 +1,6 @@
// @flow
import { generateRoomWithoutSeparator } from 'js-utils/random';
import { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';
import type { Component } from 'react';
import { isRoomValid } from '../base/conference';

View File

@@ -1,7 +0,0 @@
// @flow
export * from './actions';
export * from './components';
export * from './functions';
import './middleware';

View File

@@ -0,0 +1,48 @@
// @flow
import '../analytics/middleware';
import '../base/conference/middleware';
import '../base/config/middleware';
import '../base/jwt/middleware';
import '../base/known-domains/middleware';
import '../base/lastn/middleware';
import '../base/lib-jitsi-meet/middleware';
import '../base/logging/middleware';
import '../base/media/middleware';
import '../base/net-info/middleware';
import '../base/participants/middleware';
import '../base/redux/middleware';
import '../base/responsive-ui/middleware';
import '../base/settings/middleware';
import '../base/sounds/middleware';
import '../base/testing/middleware';
import '../base/tracks/middleware';
import '../base/user-interaction/middleware';
import '../calendar-sync/middleware';
import '../chat/middleware';
import '../conference/middleware';
import '../connection-indicator/middleware';
import '../deep-linking/middleware';
import '../device-selection/middleware';
import '../display-name/middleware';
import '../etherpad/middleware';
import '../filmstrip/middleware';
import '../follow-me/middleware';
import '../invite/middleware';
import '../large-video/middleware';
import '../lobby/middleware';
import '../notifications/middleware';
import '../overlay/middleware';
import '../recent-list/middleware';
import '../recording/middleware';
import '../rejoin/middleware';
import '../room-lock/middleware';
import '../rtcstats/middleware';
import '../subtitles/middleware';
import '../toolbox/middleware';
import '../transcribing/middleware';
import '../video-layout/middleware';
import '../video-quality/middleware';
import '../videosipgw/middleware';
import './middleware';

View File

@@ -0,0 +1,18 @@
// @flow
import '../authentication/middleware';
import '../mobile/audio-mode/middleware';
import '../mobile/back-button/middleware';
import '../mobile/background/middleware';
import '../mobile/call-integration/middleware';
import '../mobile/external-api/middleware';
import '../mobile/full-screen/middleware';
import '../mobile/incoming-call/middleware';
import '../mobile/permissions/middleware';
import '../mobile/proximity/middleware';
import '../mobile/wake-lock/middleware';
import '../mobile/watchos/middleware';
import '../share-room/middleware';
import '../youtube-player/middleware';
import './middlewares.any';

View File

@@ -0,0 +1,16 @@
// @flow
import '../base/devices/middleware';
import '../e2ee/middleware';
import '../external-api/middleware';
import '../keyboard-shortcuts/middleware';
import '../local-recording/middleware';
import '../no-audio-signal/middleware';
import '../noise-detection/middleware';
import '../old-client-notification/middleware';
import '../power-monitor/middleware';
import '../prejoin/middleware';
import '../shared-video/middleware';
import '../talk-while-muted/middleware';
import './middlewares.any';

View File

@@ -0,0 +1,49 @@
// @flow
import '../analytics/reducer';
import '../base/app/reducer';
import '../base/audio-only/reducer';
import '../base/color-scheme/reducer';
import '../base/conference/reducer';
import '../base/config/reducer';
import '../base/connection/reducer';
import '../base/dialog/reducer';
import '../base/flags/reducer';
import '../base/jwt/reducer';
import '../base/known-domains/reducer';
import '../base/lib-jitsi-meet/reducer';
import '../base/logging/reducer';
import '../base/media/reducer';
import '../base/modal/reducer';
import '../base/net-info/reducer';
import '../base/participants/reducer';
import '../base/responsive-ui/reducer';
import '../base/settings/reducer';
import '../base/sounds/reducer';
import '../base/testing/reducer';
import '../base/tracks/reducer';
import '../base/user-interaction/reducer';
import '../blur/reducer';
import '../calendar-sync/reducer';
import '../chat/reducer';
import '../deep-linking/reducer';
import '../device-selection/reducer';
import '../dropbox/reducer';
import '../etherpad/reducer';
import '../filmstrip/reducer';
import '../follow-me/reducer';
import '../google-api/reducer';
import '../invite/reducer';
import '../large-video/reducer';
import '../lobby/reducer';
import '../notifications/reducer';
import '../overlay/reducer';
import '../recent-list/reducer';
import '../recording/reducer';
import '../settings/reducer';
import '../subtitles/reducer';
import '../toolbox/reducer';
import '../transcribing/reducer';
import '../video-layout/reducer';
import '../videosipgw/reducer';
import '../welcome/reducer';

View File

@@ -0,0 +1,12 @@
// @flow
import '../authentication/reducer';
import '../mobile/audio-mode/reducer';
import '../mobile/background/reducer';
import '../mobile/call-integration/reducer';
import '../mobile/full-screen/reducer';
import '../mobile/incoming-call/reducer';
import '../mobile/watchos/reducer';
import '../youtube-player/reducer';
import './reducers.any';

View File

@@ -0,0 +1,15 @@
// @flow
import '../base/devices/reducer';
import '../e2ee/reducer';
import '../feedback/reducer';
import '../local-recording/reducer';
import '../no-audio-signal/reducer';
import '../noise-detection/reducer';
import '../power-monitor/reducer';
import '../prejoin/reducer';
import '../screenshot-capture/reducer';
import '../shared-video/reducer';
import '../talk-while-muted/reducer';
import './reducers.any';

View File

@@ -2,7 +2,7 @@
import type { Dispatch } from 'redux';
import { appNavigate } from '../app';
import { appNavigate } from '../app/actions';
import { checkIfCanJoin, conferenceLeft } from '../base/conference';
import { connectionFailed } from '../base/connection';
import { openDialog } from '../base/dialog';

View File

@@ -171,6 +171,7 @@ class LoginDialog extends Component<Props, State> {
underlineColorAndroid = { FIELD_UNDERLINE }
value = { this.state.username } />
<TextInput
autoCapitalize = { 'none' }
onChangeText = { this._onPasswordChange }
placeholder = { t('dialog.userPassword') }
placeholderTextColor = { PLACEHOLDER_COLOR }
@@ -263,7 +264,7 @@ class LoginDialog extends Component<Props, State> {
*/
_onUsernameChange(text) {
this.setState({
username: text
username: text.trim()
});
}

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