Compare commits

..

194 Commits

Author SHA1 Message Date
Leonard Kim
c0a8a386a5 fix(pinning): debounce autopin subscriber
The store's remote tracks get cleared
and re-added when switching in and out
of p2p, which can cause pinning thrashing.
Avoid that with a debounce.
2019-08-12 17:31:53 -07:00
Leonard Kim
7af081ea99 fix(avatars): re-render avatar on any resize 2019-08-12 12:41:57 -07:00
Дамян Минков
8800cb4580 Adds live streaming sound notification. (#4532)
* Adds live streaming sound notification.

* Adds ios resources for the new files.
2019-08-12 18:34:38 +03:00
Karthik Muralidharan
b658f20a30 feat(API): add dominant speaker changed event
Fixes: https://github.com/jitsi/jitsi-meet/issues/4049
2019-08-09 10:09:33 +02:00
Hristo Terezov
c3e52f32f9 feat: Add logging for thumbnail display mode and tile view. 2019-08-09 01:08:19 -07:00
George Politis
ab73d808fe Updates lib-jitsi-meet. 2019-08-08 18:05:50 +02:00
dependabot[bot]
e110460793 Bump jquery from 3.3.1 to 3.4.0
Bumps [jquery](https://github.com/jquery/jquery) from 3.3.1 to 3.4.0.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Commits](https://github.com/jquery/jquery/compare/3.3.1...3.4.0)

Signed-off-by: dependabot[bot] <support@github.com>
2019-08-08 14:37:18 +02:00
dependabot[bot]
c0ee451ca1 Bump lodash from 4.17.11 to 4.17.13
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.13.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.13)

Signed-off-by: dependabot[bot] <support@github.com>
2019-08-08 10:34:51 +02:00
Saúl Ibarra Corretgé
67dca97d1d rn,participants: don't render thumbnnail for screen-shares 2019-08-07 20:16:13 +02:00
Saúl Ibarra Corretgé
fd0ca76255 web,avatar: fix setting avatar size
Use the width of its container as the size, so the font icons can be rendered at
a good size.
2019-08-07 20:16:13 +02:00
Saúl Ibarra Corretgé
149e53af76 avatar: render a special avatar if the user is sharing their screen 2019-08-07 20:16:13 +02:00
Saúl Ibarra Corretgé
f3e7952e51 audio-only: implement initial "low bandwidth mode"
It's an evolution of audio-only mode, where we also allow for receiving a remote
screen-share.

Diving deeper: this basically sets last N to 1 or 0 depending on the
availability of a screen-share.
2019-08-07 20:16:13 +02:00
Saúl Ibarra Corretgé
0f77cf9e0c android: use adaptive icons 2019-08-07 14:40:20 +02:00
damencho
66eb09fb63 Revert raisedHand thumb tooltip i18n string. 2019-08-07 14:59:24 +03:00
Hristo Terezov
b7f2c7d487 chore(lib-jitsi-meet): Update. 2019-08-06 01:59:01 -07:00
Bettenbuk Zoltan
bed3f62536 feat: make links in chat clickable 2019-08-06 08:48:37 +02:00
Leonard Kim
e8eb7e1e1f fix(suboptimal-browser): remove inserting of app name in notification
This prevents inserting any user overridden APP_NAME
values into html. A new translation key is being used
to immediately stop non-english languages from using the
problematic string.

Also tweaked the copy to remove the "eer" and fix
some grammar.
2019-08-05 06:47:44 -07:00
Leonard Kim
1409d6fb5e fix(deep-linking): do not accept native app name as raw html
There is no need to display the native app name as
raw html.
2019-08-04 06:45:00 -07:00
Bettenbuk Zoltan
a2cbd9229a fix: render notification description on mobile 2019-08-02 21:14:19 +02:00
Saúl Ibarra Corretgé
bf50a110c7 lastn: simplify computing the effective last N value 2019-08-02 15:54:47 +02:00
Saúl Ibarra Corretgé
467c9d36cf audio-only,lastn: move audio-only and last N handling to standalone features
This refactors all handling of audio-only and last N to 2 features in preparation
for "low bandwidth mode".

The main motivation to do this is that lastN is a "global" setting so it helps
to have all processing for it in a single place.
2019-08-02 15:54:47 +02:00
damencho
6ddd17c769 Removes resolveAppName postprocess we do not need.
i18next.options are initialized before interfaceConfig overwrites are processed which leads to wrong translations.
2019-08-01 12:47:58 +01:00
virtuacoplenny
732f2c1963 ref(feedback): emit api feedback submitted on completion (#4499)
* ref(feedback): emit api feedback submitted on completion

Compared to firing the event on submission because
the submission ajax will not be completed at that
time..

* squash: update package.json
2019-07-31 10:59:22 -07:00
Bettenbuk Zoltan
e7144eb674 Get chat message display name from backend 2019-07-31 10:48:22 +02:00
Saúl Ibarra Corretgé
b5489b7c81 rn,filmstrip: don't unpin participant when hiding filmstrip
The filmstrip is currently only hidden when PiP mode is entered. There is no
real reason not to leave the large view as it was.
2019-07-30 18:51:40 +02:00
Saúl Ibarra Corretgé
4d5332cadf rn,conference: log pin participant analytics events also on mobile 2019-07-30 17:11:43 +02:00
Saúl Ibarra Corretgé
5261f61110 conference: don't pin participants on the JVB
When a participant is pinned in the UI we then proceed to mark it as selected on
the JVB. This will make the participant part of the last N set and will receive
the highest (or configured highest) video quality.

Pinning a participant at the JVB level just makes sure it will be part of the
last N set.

Since only one participant can be pinned in the UI, there is no point in pinning
it at the JVB level, since selecting it already achieved the same result.
2019-07-30 17:11:43 +02:00
paweldomas
8c7d6da5d5 deps: update LJM to get analytics fixes
Bumps LJM to 3c8058743177b6b6963d3bc3df14f4ea650ef310.
2019-07-30 15:45:43 +02:00
Leonard Kim
6d91728a74 fix(proxy): stop screenshare when the connection stops 2019-07-30 06:40:57 -07:00
Hristo Terezov
9b32fc95eb chore(package): update lib-jitsi-meet version. 2019-07-30 01:55:02 -07:00
Leonard Kim
6bc1d87753 feat(shortcuts): add shortcut for opening video quality modal 2019-07-29 11:40:07 -07:00
damencho
a5fc62b920 Updates correct loading and fix checking is dominant speaker. 2019-07-26 11:18:55 +01:00
Saúl Ibarra Corretgé
49f6010905 pagedlist: fix refresh on wrapped components 2019-07-26 10:38:54 +02:00
paweldomas
1c27f567ee feat: send analytics event when conference is rejoined 2019-07-26 08:25:53 +02:00
paweldomas
7684b2bf98 ref: move getCurrentConferenceUrl to base/connection
Moves getCurrentConferenceUrl method to base/connection to allow reuse.
The new location is not ideal, but looks the best based on the imports
required (trying to avoid circular dependencies).
2019-07-26 08:25:53 +02:00
damencho
8886bcdb73 Fixes missing strings. 2019-07-26 07:07:31 +01:00
Saúl Ibarra Corretgé
437bdb92be deps: update react-native-webrtc and lib-jitsi-meet
Support for the MediaStream constructor has been added to react-native-webrtc.
2019-07-25 23:52:54 +02:00
Saúl Ibarra Corretgé
6943659dc9 rn: enable auto-pinning on screenshare on mobile 2019-07-25 14:27:04 +02:00
Saúl Ibarra Corretgé
35f934e197 config: remove old backwards compatibility shim
It was added for
3ea2f00578
over 2 years ago. That's long enough!
2019-07-25 11:45:16 +02:00
damencho
aca0469bd0 Fixes mobile wifi stats timestamp value type. 2019-07-25 10:20:48 +01:00
Дамян Минков
11f2e7291e Talk while muted sound notification (#4473)
* Moves talk while muted as a new feature.

* Adds sound notification for talk while muted.

* Reorder imports and changes the dispatch of the notification.

* Introduces sounds.js for talk while muted.
2019-07-23 21:56:05 +01:00
Bettenbuk Zoltan
7a985dd843 fix: disable reduced UI on welcome page 2019-07-23 17:52:03 +02:00
damencho
e09ea36055 Maps available locales for countries to the doubled languages.
This maps the tow letter languages as enGB to the country file for en.
Copies countries-en.json as countries-enGB.json.
2019-07-23 10:10:03 +01:00
damencho
ad3a087091 Commit from translate.jitsi.org by user damencho.: 532 of 586 strings translated (9 fuzzy). 2019-07-22 23:06:01 +00:00
damencho
d379b4d53b Commit from translate.jitsi.org by user damencho.: 546 of 586 strings translated (0 fuzzy). 2019-07-22 23:05:43 +00:00
damencho
7a99d57274 Commit from translate.jitsi.org by user damencho.: 478 of 586 strings translated (6 fuzzy). 2019-07-22 23:00:06 +00:00
damencho
85bc0ed5fc Commit from translate.jitsi.org by user damencho.: 535 of 586 strings translated (6 fuzzy). 2019-07-22 22:57:36 +00:00
damencho
f4dda6e7ce Commit from translate.jitsi.org by user damencho.: 434 of 586 strings translated (15 fuzzy). 2019-07-22 22:54:29 +00:00
damencho
5c8dfabf7c Commit from translate.jitsi.org by user damencho.: 538 of 586 strings translated (0 fuzzy). 2019-07-22 22:50:47 +00:00
damencho
20d03f3228 Commit from translate.jitsi.org by user damencho.: 343 of 586 strings translated (18 fuzzy). 2019-07-22 22:46:35 +00:00
damencho
268137bb97 Commit from translate.jitsi.org by user damencho.: 342 of 586 strings translated (19 fuzzy). 2019-07-22 22:44:50 +00:00
damencho
f87463780c Commit from translate.jitsi.org by user damencho.: 506 of 586 strings translated (1 fuzzy). 2019-07-22 22:42:16 +00:00
damencho
6b2ced63c7 Commit from translate.jitsi.org by user damencho.: 506 of 586 strings translated (0 fuzzy). 2019-07-22 22:40:00 +00:00
damencho
d6fbe55360 Commit from translate.jitsi.org by user damencho.: 411 of 586 strings translated (9 fuzzy). 2019-07-22 22:38:36 +00:00
damencho
0feeb94fc7 Commit from translate.jitsi.org by user damencho.: 491 of 586 strings translated (5 fuzzy). 2019-07-22 22:36:34 +00:00
damencho
c9c509ec51 Commit from translate.jitsi.org by user damencho.: 539 of 586 strings translated (4 fuzzy). 2019-07-22 22:34:45 +00:00
damencho
f7ff457a3b Commit from translate.jitsi.org by user damencho.: 536 of 586 strings translated (3 fuzzy). 2019-07-22 22:32:29 +00:00
damencho
72127aaa0b Commit from translate.jitsi.org by user damencho.: 505 of 586 strings translated (4 fuzzy). 2019-07-22 22:30:42 +00:00
damencho
b8854a3b45 Commit from translate.jitsi.org by user damencho.: 538 of 586 strings translated (4 fuzzy). 2019-07-22 22:27:01 +00:00
damencho
e6e7001857 Commit from translate.jitsi.org by user damencho.: 535 of 586 strings translated (7 fuzzy). 2019-07-22 22:19:53 +00:00
damencho
6d4601fe66 Updates used languages and fixes loading them. 2019-07-22 17:48:44 +01:00
damencho
8ecb01ec21 Commit from translate.jitsi.org by user damencho.: 545 of 586 strings translated (1 fuzzy). 2019-07-22 14:48:34 +00:00
damencho
14ccb41015 Commit from translate.jitsi.org by user damencho.: 545 of 586 strings translated (1 fuzzy). 2019-07-22 14:29:08 +00:00
damencho
348cde54e7 Commit from translate.jitsi.org by user damencho.: 545 of 586 strings translated (1 fuzzy). 2019-07-22 14:24:36 +00:00
damencho
430bd3f141 Commit from translate.jitsi.org by user damencho.: 535 of 586 strings translated (7 fuzzy). 2019-07-22 13:03:23 +00:00
damencho
b36f419e86 Commit from translate.jitsi.org by user damencho.: 122 of 586 strings translated (28 fuzzy). 2019-07-22 13:03:11 +00:00
damencho
ed1d03db71 Commit from translate.jitsi.org by user damencho.: 524 of 586 strings translated (5 fuzzy). 2019-07-22 13:02:58 +00:00
damencho
5d837571c0 Commit from translate.jitsi.org by user damencho.: 538 of 586 strings translated (5 fuzzy). 2019-07-22 13:02:46 +00:00
damencho
f23532d7f4 Commit from translate.jitsi.org by user damencho.: 78 of 586 strings translated (12 fuzzy). 2019-07-22 13:02:33 +00:00
damencho
0280294a8f Commit from translate.jitsi.org by user damencho.: 80 of 586 strings translated (12 fuzzy). 2019-07-22 13:02:19 +00:00
damencho
fdd1418236 Commit from translate.jitsi.org by user damencho.: 433 of 586 strings translated (16 fuzzy). 2019-07-22 13:02:05 +00:00
damencho
bae47434b1 Commit from translate.jitsi.org by user damencho.: 531 of 586 strings translated (10 fuzzy). 2019-07-22 13:01:52 +00:00
damencho
3c98cfc136 Commit from translate.jitsi.org by user damencho.: 216 of 586 strings translated (36 fuzzy). 2019-07-22 13:01:25 +00:00
damencho
17e5bc7b73 Commit from translate.jitsi.org by user damencho.: 89 of 586 strings translated (5 fuzzy). 2019-07-22 13:01:11 +00:00
damencho
6092655099 Commit from translate.jitsi.org by user damencho.: 503 of 586 strings translated (6 fuzzy). 2019-07-22 13:00:59 +00:00
damencho
721cca669f Commit from translate.jitsi.org by user damencho.: 0 of 586 strings translated (0 fuzzy). 2019-07-22 13:00:49 +00:00
damencho
c62ff0939d Commit from translate.jitsi.org by user damencho.: 505 of 586 strings translated (1 fuzzy). 2019-07-22 12:58:57 +00:00
damencho
ecf050c2d9 Commit from translate.jitsi.org by user damencho.: 344 of 586 strings translated (15 fuzzy). 2019-07-22 12:58:46 +00:00
damencho
069137b02a Commit from translate.jitsi.org by user damencho.: 25 of 586 strings translated (0 fuzzy). 2019-07-22 12:58:34 +00:00
damencho
f053cad66c Commit from translate.jitsi.org by user damencho.: 123 of 586 strings translated (20 fuzzy). 2019-07-22 12:58:22 +00:00
damencho
4be3042cb0 Commit from translate.jitsi.org by user damencho.: 445 of 586 strings translated (25 fuzzy). 2019-07-22 12:58:09 +00:00
damencho
593235d683 Commit from translate.jitsi.org by user damencho.: 490 of 586 strings translated (6 fuzzy). 2019-07-22 12:57:56 +00:00
damencho
7bd8ddbba2 Commit from translate.jitsi.org by user damencho.: 39 of 586 strings translated (2 fuzzy). 2019-07-22 12:57:44 +00:00
damencho
14232b1d93 Commit from translate.jitsi.org by user damencho.: 515 of 586 strings translated (17 fuzzy). 2019-07-22 12:57:25 +00:00
damencho
ff4887a3c8 Commit from translate.jitsi.org by user damencho.: 535 of 586 strings translated (4 fuzzy). 2019-07-22 12:57:12 +00:00
damencho
0289aacd4f Commit from translate.jitsi.org by user damencho.: 505 of 586 strings translated (2 fuzzy). 2019-07-22 12:57:01 +00:00
damencho
99c13eaec0 Commit from translate.jitsi.org by user damencho.: 254 of 586 strings translated (22 fuzzy). 2019-07-22 12:56:48 +00:00
damencho
1a713dfa27 Commit from translate.jitsi.org by user damencho.: 536 of 586 strings translated (4 fuzzy). 2019-07-22 12:56:36 +00:00
damencho
7e84b51ee0 Commit from translate.jitsi.org by user damencho.: 534 of 586 strings translated (4 fuzzy). 2019-07-22 12:56:22 +00:00
damencho
86fa442d0e Commit from translate.jitsi.org by user damencho.: 148 of 586 strings translated (18 fuzzy). 2019-07-22 12:55:58 +00:00
damencho
93b88f1a16 Commit from translate.jitsi.org by user damencho.: 342 of 586 strings translated (19 fuzzy). 2019-07-22 12:55:46 +00:00
damencho
2041d4fffb Commit from translate.jitsi.org by user damencho.: 534 of 586 strings translated (0 fuzzy). 2019-07-22 12:54:35 +00:00
jitsi-pootle
83c3e7c725 New files added from translate.jitsi.org based on templates 2019-07-22 12:53:40 +00:00
damencho
a34331891a Commit from translate.jitsi.org by user damencho.: 477 of 586 strings translated (7 fuzzy). 2019-07-22 12:46:37 +00:00
damencho
56dd83740c Commit from translate.jitsi.org by user damencho.: 533 of 586 strings translated (8 fuzzy). 2019-07-22 12:46:23 +00:00
damencho
debe50c3f4 Commit from translate.jitsi.org by user damencho.: 227 of 586 strings translated (22 fuzzy). 2019-07-22 12:46:08 +00:00
damencho
d9985c786c Commit from translate.jitsi.org by user damencho.: 5 of 586 strings translated (0 fuzzy). 2019-07-22 12:42:06 +00:00
damencho
ed910947d4 Commit from translate.jitsi.org by user damencho.: 268 of 586 strings translated (27 fuzzy). 2019-07-22 12:41:32 +00:00
damencho
c4c5eace25 Commit from translate.jitsi.org by user damencho.: 206 of 586 strings translated (29 fuzzy). 2019-07-22 12:40:07 +00:00
damencho
c6bf646fe8 Commit from translate.jitsi.org by user damencho.: 410 of 586 strings translated (10 fuzzy). 2019-07-22 12:37:36 +00:00
jitsi-pootle
ab2bb7686e New files added from translate.jitsi.org based on templates 2019-07-22 10:14:05 +00:00
jitsi-pootle
12b53c38b9 New files added from translate.jitsi.org based on templates 2019-07-22 10:14:05 +00:00
jitsi-pootle
ca31c8b199 New files added from translate.jitsi.org based on templates 2019-07-22 10:14:05 +00:00
jitsi-pootle
1b331ce090 New files added from translate.jitsi.org based on templates 2019-07-22 10:14:05 +00:00
jitsi-pootle
edd55e7798 New files added from translate.jitsi.org based on templates 2019-07-22 10:14:05 +00:00
Дамян Минков
9f4da84701 I18next update (#4456)
* Removes unused translations.

* Fixes using translated strings.

* Moves using latest i18next versions and stop using compatibility modes.

* Sorts i18next options.

* Fixes defaultNS used by i18next.

This is used when translating html tags with data-i18n keys as attributes, used by jQuery-Impromptu.
2019-07-22 11:10:25 +01:00
Leonard Kim
0097360396 feat(deep-linking): allow disabling through override 2019-07-19 14:48:46 -07:00
Hristo Terezov
b5cef05941 fix(AOT): imports. 2019-07-19 07:17:15 -07:00
George Politis
ddab9224b2 Merge pull request #4460 from jitsi/analytics-event-for-connectivity-issues
deps: update lib-jitsi-meet
2019-07-18 18:26:28 +02:00
George Politis
a5693c6e96 updates package-lock.json 2019-07-18 17:25:46 +02:00
George Politis
8dd345b192 deps: update lib-jitsi-meet
With the update we get a new analytics event that sends connectivity
issues events to the analytics backend.
2019-07-18 17:10:29 +02:00
Leonard Kim
130ab886ee fix(chat): show toolbar on open 2019-07-18 06:08:27 -07:00
Leonard Kim
c0e9f2b95a fix(chat): workaround for chat scroll causing layout misalignment 2019-07-18 06:08:27 -07:00
Leonard Kim
011972872e fix(blur): add beta label to toolbar button 2019-07-16 10:35:31 -07:00
Saúl Ibarra Corretgé
ef5720a3f0 deps: update react-native-webrtc
Fixes: https://github.com/jitsi/jitsi-meet/issues/4436
2019-07-16 17:55:37 +01:00
Bettenbuk Zoltan
ec30af2844 feat: always show labels 2019-07-16 17:32:58 +02:00
Bettenbuk Zoltan
e08aeca28c feat: use css to place the toolbox buttons 2019-07-16 17:01:24 +02:00
Bettenbuk Zoltan
ad7892ebce aot: jigasi participant icon 2019-07-16 13:04:17 +02:00
Saúl Ibarra Corretgé
cbc7e1b6be android: fix crash if UserInfo is not set
Fixes: https://github.com/jitsi/jitsi-meet-sdk-samples/issues/11
2019-07-16 07:29:07 +01:00
Saúl Ibarra Corretgé
da7d959b9a android: raise SDK version 2019-07-16 07:29:07 +01:00
virtuacoplenny
ada57ebcd0 ref(user-interaction): do not store listener, move browser check to lib (#4441)
* ref(user-interaction): remove storing of listener

* ref(user-interaction): move browser requirement check to lib-jitsi-meet

* ref(user-interaction): no inner function for listener, use module scope
2019-07-13 06:59:58 -07:00
Bettenbuk Zoltan
1993ad10eb feat: apply color brand guidelines 2019-07-12 20:48:49 +02:00
Bettenbuk Zoltan
d305caf910 feat: borderless toolbox icons 2019-07-12 20:48:49 +02:00
Bettenbuk Zoltan
a25a504a59 feat: add bottom gradient 2019-07-12 20:48:49 +02:00
damencho
250c61279b Updates react-native callstats dependency, to use siteID on mobile. 2019-07-12 18:24:44 +01:00
Saúl Ibarra Corretgé
1e18af2d1a rn: fix not showing a prompt when permissions have been denied
This only shows up if we cannot prompt again, like when turning permissions off
in the Settings app in iOS.
2019-07-12 17:50:54 +02:00
Дамян Минков
eb1fd4fd88 Merge pull request #4438 from jitsi/cs-siteid
Passes confID when initializing JitsiConference.
2019-07-12 14:25:35 +01:00
Matthias Herzog
e0c8b6b3c0 fix welcome page title fixes #4273 2019-07-12 14:25:26 +01:00
Дамян Минков
9071cd4813 Listens for suspend events from jitsi-power-monitor on postis channel. (#4428)
* Listens for suspend events from jitsi-power-monitor on postis channel.

* Removes duplicated type and actions.

* Moves suspendDetected state from overlay to power-monitor feature.
2019-07-12 14:08:34 +01:00
Saúl Ibarra Corretgé
9bf650c700 android: keep okio classes
Fixes running profile builds.
2019-07-12 14:22:36 +02:00
Saúl Ibarra Corretgé
49e3b03885 android: custom initialization of the WebRTC module
Set our own audio device manager so we can tweak it if need be (enabling /
disabling the HW AEC on specific devices).

Switch to using the software video encoder / decoder. This may feel like a
downgrade, but it has advantages:

- simulcast is now working (on par with iOS)
- certain devices have broken VP8 HW encoders (I'm looking at you Samsung Galaxy
S7) so this fixes that
2019-07-12 14:22:36 +02:00
Saúl Ibarra Corretgé
31e996ac3f android: always run adb reverse when starting the packager
It tends to close, so always open the reverse tunnel.
2019-07-12 14:22:36 +02:00
Saúl Ibarra Corretgé
d1c447e97b deps: update react-native-webrtc
- Fix crash in PeerConnection.close (Android)
- Add ability to customize PeerConnectionFactory (Android)
2019-07-12 14:22:36 +02:00
damencho
8a34c0a80f Updates lib-jitsi-meet. 2019-07-12 11:17:53 +01:00
virtuacoplenny
2f626ea474 ref(api): move participant join and left to middleware (#4365) 2019-07-11 12:44:27 -07:00
Bettenbuk Zoltan
0a76eebca7 feat: central back button registry 2019-07-11 16:14:08 +02:00
damencho
0e9e695251 Passes confID when initializing JitsiConference.
The confID is domain.com/RoomName or domain.com/tenant/RoomName, adds the tenant if any and also keeps the room name case.
2019-07-11 14:58:14 +01:00
Leonard Kim
b86df7a8e3 fix(remote-control): do not assume failed query is missing support
Multiple requests for checkUserRemoteControlSupport can be in
flight simultaneously. Order of promise resolution is not
guaranteed. It is possible for Request A and Request B to be
in flight and then Request B's promise chain resolves first.
Request A could have encountered errors and then resolve. Then
what could happen is checkUserRemoteControlSupport returns true
for remote control support due to Request B and the UI updates.
But then checkUserRemoteControlSupport returns false for
remote control support due to Request A's error and the UI
updates to hide remote control.
2019-07-11 07:25:08 +01:00
Bettenbuk Zoltan
5b25e02e26 feat: use dialog instead of alert when inviting 2019-07-10 20:50:14 +02:00
Bettenbuk Zoltan
0e6f14bb7c fix: avoid false triggering CDU in SlidingView 2019-07-10 20:49:50 +02:00
Leonard Kim
57b9954d9c fix(api): support params with value of undefined 2019-07-10 11:09:11 -07:00
virtuacoplenny
249dd7b8b8 fix(invite): decode the meeting name (#4411)
* fix(invite): decode the meeting name

* squash: try to make mobile join same encoded meeting name as web

* Decodes and generated texts for share and copy meeting info.

Decodes in all cases except when it contains a space, as it will generate wrong links when pasted/shared in external applications.
2019-07-10 10:27:11 -07:00
Bettenbuk Zoltan
b31d7b4451 ref: remove createStyleSheet from dialog styles 2019-07-10 16:42:56 +02:00
Bettenbuk Zoltan
8dea3389ee fix: avoid clicking behind dialogs 2019-07-10 16:42:56 +02:00
virtuacoplenny
e7f9e8e7f7 fix(conference): require user interaction to unmute in iframe (#4429)
* fix(conference): require user interaction to unmute in iframe

* squash: explicitly whitelist react native
2019-07-10 12:02:27 +01:00
Bettenbuk Zoltan
a53a86ee7a feat: add room lock pwd error message 2019-07-10 11:01:49 +02:00
Saúl Ibarra Corretgé
598b6f0598 deps: update react-native-webrtc
WebRTC is now at M75
2019-07-09 17:22:32 +02:00
Saúl Ibarra Corretgé
b245945c4a android: be explicit about starting a foreground service
After calling startService we are supposed to have a bit of time before turning
the service into a foreground service, but certain devices seem to be more
spartan and we've seen the following failure:

Caused by java.lang.IllegalStateException: Not allowed to start service Intent { act=JitsiMeetOngoingConferenceService:START cmp=org.jitsi.meet/.sdk.JitsiMeetOngoingConferenceService }: app is in background uid UidRecord{f6778d5 u0a220 CAC  bg:+1m1s417ms idle change:idle procs:1 proclist:15604, seq(0,0,0)}
       at android.app.ContextImpl.startServiceCommon + 1600(ContextImpl.java:1600)
       at android.app.ContextImpl.startService + 1546(ContextImpl.java:1546)
       at android.content.ContextWrapper.startService + 669(ContextWrapper.java:669)
       at org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService.launch + 50(JitsiMeetOngoingConferenceService.java:50)

Be expliocit and call startForegroundService, on supported platforms.
2019-07-09 16:14:39 +02:00
Bettenbuk Zoltan
301a8e319a fix: reduce avatar font size 2019-07-09 15:45:38 +02:00
Saúl Ibarra Corretgé
820abfd059 ios: sync Podfile.lock 2019-07-09 12:58:07 +02:00
Hristo Terezov
1d42420a36 fix(font): Bring back the missing icons. 2019-07-08 20:03:04 +01:00
Hristo Terezov
1b4bdb5142 fix(blur): on FF 2019-07-08 20:03:04 +01:00
Hristo Terezov
f030a3f1fb fix(blur): when switching video tracks. 2019-07-08 20:03:04 +01:00
Hristo Terezov
8f79779ca7 fix(blur): Disable for SS 2019-07-08 20:03:04 +01:00
Saúl Ibarra Corretgé
c5111bb359 rn: update default color scheme 2019-07-08 20:27:44 +02:00
Bettenbuk Zoltan
42814eac7d feat: add icon based avatar and icon for pstn 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
74d0013acc feat: use participant id for avatar color 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
88e4850c4d fix: remove locally generated avatar ID 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
87f9b1cf92 ref: remove unnecesary functions 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
fe1187d7b7 ref: remove unused libs 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
a35b36d6df feat: dynamic avatar font size 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
a04982fd96 fix: AlwaysOnTop avatar 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
658679f89e fix: undefined participant in avatar call 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
f90fc665f8 ui: bigger padding to default avatar 2019-07-08 16:53:30 +02:00
Bettenbuk Zoltan
0c8130af41 fix: default avatar relative url 2019-07-08 16:53:30 +02:00
paweldomas
e4c5968459 fix: bring back the add meeting URL button
Brings back the button for generating meeting URLs for calendar events.
2019-07-08 09:26:33 -05:00
damencho
a148cd41a4 Fixes loading wifi-stats when used from jitsi-meet electron utils. 2019-07-08 14:30:20 +01:00
Saúl Ibarra Corretgé
f8a049759d android: fix crash if notification is null
I cannot see a path leading to it being null, but Crashlytics demonstrated it's
possible (so far in a small subset of old devices). Be defensive then.
2019-07-05 10:11:00 +02:00
Hristo Terezov
4b4225e14f chore(lib-jitsi-meet): Update. 2019-07-04 06:26:32 -07:00
Hristo Terezov
3b0c5d0b6a fix(blur): many small issues. 2019-07-04 06:26:32 -07:00
Cristian Florin Ghita
3b750ddd5a Add video background blur 2019-07-04 06:26:32 -07:00
Saúl Ibarra Corretgé
6383d000a9 rn: raise version to 19.3 2019-07-03 21:09:15 +02:00
Bettenbuk Zoltan
a48d67bdc7 fix: inconsistent state when quickly closing a sliding view 2019-07-03 13:43:56 +02:00
Saúl Ibarra Corretgé
2f92e72858 android: raise SDK version 2019-07-03 13:28:31 +02:00
Saúl Ibarra Corretgé
d2c85ada1b android: fix deadlock in uncaught exception handler
The app is about to crash at that stage so it was a moot point to try to leave
the conference anyway.

Stopping ConnectionServers is still a good idea though, since a crash may leave
the device in a bad state otherwise.
2019-07-03 13:28:18 +02:00
Saúl Ibarra Corretgé
55b95c52d6 android: fix synchronized access to listeners set
Fixes this issue:

~~~
    java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextNode(HashMap.java:1441)
        at java.util.HashMap$KeyIterator.next(HashMap.java:1465)
        at org.jitsi.meet.sdk.OngoingConferenceTracker.updateListeners(OngoingConferenceTracker.java:89)
        at org.jitsi.meet.sdk.OngoingConferenceTracker.onExternalAPIEvent(OngoingConferenceTracker.java:74)
        at org.jitsi.meet.sdk.ExternalAPIModule.sendEvent(ExternalAPIModule.java:71)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
        at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:158)
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
        at android.os.Looper.loop(Looper.java:214)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:232)
        at java.lang.Thread.run(Thread.java:764)
~~~
2019-07-03 13:28:18 +02:00
Chris Hansen
52362c4675 Fix spelling mistake on pragma mark
It causes a compiler error in Xcode 11 because it doesn't know how to parse it.
2019-07-02 14:11:01 -07:00
netaskd
8da0552541 microsoftCalendar: add showing calendar events in local timezone. 2019-07-02 21:20:00 +01:00
Hristo Terezov
7ce0def995 fix(mobile): After PR #4396 2019-07-02 10:36:37 -07:00
Hristo Terezov
48285e8a2d fix(conference): Don't use this._room.
this._room should be used only by jitsi-meet-torture and for test purposes. Also this._room is assigned later than room. This may cause some issues, for example conference.getMyUserId() may return undefined while the user id is already available beacuse this._room hasn't been assigned yet.
2019-07-02 07:38:57 -07:00
Hristo Terezov
21dcc41d31 ref(large-video): switch LargeVideo logic to react 2019-07-02 07:38:57 -07:00
Дамян Минков
625d268373 Room lock update (#4394)
* Adds a notification when remote lock happens.

* Updates translations.

Removes unused strings and extracts room password to separate translation, to be able to change it when deployment uses only digits.

* Formats the conference pin when showing it.

* Removes member from translation in favour of participant.

* Updates formatting of the pin.

* Adds a notification when password is remotely removed.
2019-07-02 14:14:58 +01:00
Дамян Минков
681782ed20 Adds back talk while muted notification. (#4392)
* Adds back talk while muted notification.

* Adds unmute button to the notification.
2019-07-02 12:59:25 +01:00
Saúl Ibarra Corretgé
1baa85b649 rn: hide invite button if the functionality is not available 2019-07-02 12:30:50 +02:00
Bettenbuk Zoltan
72137a2811 feat: initial based avatars 2019-07-01 23:59:16 +02:00
Leonard Kim
0734ce7ae3 feat(api): add notifications for kicked participants 2019-07-01 12:53:25 -07:00
Дамян Минков
2dc06c28e3 Adds option to be able to cancel locked rooms and leave. (#4391)
* Adds option to be able to cancel locked rooms and leave.

* Removes not needed operations when canceling password prompt.
2019-07-01 13:02:25 +01:00
paweldomas
5848669552 feat(analytics): time since last success in connection dropped
Update LJM to 9bcc2a26cc94683b8ed302418695a331b450df97 in order to bring
in the analytics update which will add a property indicating how much
time has passed since the last successful XMPP request came through.
2019-06-28 13:30:50 -05:00
Leonard Kim
c0376d238a ref(notifications): do not notify of local participant left
Join notifications are already supressed for the local
participant, so hide the left notification. For now
the notification is not being shown on mobile to keep
the same existing behavior and because a copy change
will be needed, but will be added once batching is
implemented.
2019-06-28 09:18:18 -07:00
Leonard Kim
979b773c3c ref(notifications): move join notification firing to notifications feature 2019-06-27 17:29:02 -07:00
Leonard Kim
3195a449ca ref(conference): web and native exercise same redux flow for kicked out 2019-06-27 09:34:05 -07:00
Bettenbuk Zoltan
d7483f07e3 feat: add possibility to clear invite search field 2019-06-27 18:17:37 +02:00
Дамян Минков
9c1b802997 Device selection now always shows the device that it managed to open. (#4384)
* Device selection now always shows the device that managed to open.

* Simplifies implementation, skips using state.
2019-06-27 17:04:47 +01:00
damencho
bb3a10b0fc Safe guard for removed parent node of the iframe. 2019-06-27 14:23:59 +01:00
342 changed files with 25980 additions and 15990 deletions

View File

@@ -45,6 +45,8 @@ deploy-appbundle:
$(OUTPUT_DIR)/analytics-ga.js \
$(BUILD_DIR)/analytics-ga.min.js \
$(BUILD_DIR)/analytics-ga.min.map \
$(BUILD_DIR)/video-blur-effect.min.js \
$(BUILD_DIR)/video-blur-effect.min.map \
$(DEPLOY_DIR)
deploy-lib-jitsi-meet:

View File

@@ -207,24 +207,6 @@ public class MainActivity extends FragmentActivity implements JitsiMeetActivityI
</details>
Starting with SDK version 1.22, a Glide module must be provided by the host app.
This makes it possible to use the Glide image processing library from both the
SDK and the host app itself.
You can use the code in `JitsiGlideModule.java` and adjust the package name.
When building, add the following code in your `app/build.gradle` file, adjusting
the Glide version to match the one in https://github.com/jitsi/jitsi-meet/blob/master/android/build.gradle
```
// Glide
implementation("com.github.bumptech.glide:glide:${glideVersion}") {
exclude group: "com.android.support", module: "glide"
}
implementation("com.github.bumptech.glide:annotations:${glideVersion}") {
exclude group: "com.android.support", module: "annotations"
}
```
### JitsiMeetActivity
This class encapsulates a high level API in the form of an Android `FragmentActivity`

6
android/app/.classpath Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin/default"/>
</classpath>

23
android/app/.project Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>app</name>
<comment>Project app created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,2 @@
connection.project.dir=..
eclipse.preferences.version=1

View File

@@ -88,15 +88,6 @@ dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
// Glide
implementation("com.github.bumptech.glide:glide:${rootProject.ext.glideVersion}") {
exclude group: "com.android.support", module: "glide"
}
implementation("com.github.bumptech.glide:annotations:${rootProject.ext.glideVersion}") {
exclude group: "com.android.support", module: "annotations"
}
annotationProcessor "com.github.bumptech.glide:compiler:${rootProject.ext.glideVersion}"
}
gradle.projectsEvaluated {

View File

@@ -60,19 +60,9 @@
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keep class okio.** { *; }
-dontwarn okio.**
# FastImage + Glide
-keep public class com.dylanvann.fastimage.* {*;}
-keep public class com.dylanvann.fastimage.** {*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
# WebRTC
-keep class org.webrtc.** { *; }

View File

@@ -1,16 +0,0 @@
package org.jitsi.meet;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
/**
* An AppGlideModule needs to be present for image loading events to work in
* react-native-fast-image. However, if this is defined by the SDK it will cause trouble with
* apps which are using Glide themselves.
*
* In order to avoid the problem, define a Jitsi Glide module here, so applications already using
* it are not in trouble.
*/
@GlideModule
public final class JitsiGlideModule extends AppGlideModule {
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#66A8DD</color>
</resources>

View File

@@ -164,10 +164,6 @@ ext {
mavenUser = System.env.MVN_USER ?: ""
mavenPassword = System.env.MVN_PASSWORD ?: ""
// Glide
excludeAppGlideModule = true
glideVersion = "4.7.1" // keep in sync with react-native-fast-image
// Libre build
libreBuild = (System.env.LIBRE_BUILD ?: "false").toBoolean()
}

View File

@@ -17,5 +17,5 @@
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
appVersion=19.2.0
appVersion=19.3.0
sdkVersion=2.2.2

View File

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

6
android/sdk/.classpath Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin/default"/>
</classpath>

23
android/sdk/.project Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>sdk</name>
<comment>Project sdk created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,2 @@
connection.project.dir=..
eclipse.preferences.version=1

View File

@@ -54,9 +54,6 @@ dependencies {
implementation project(':react-native-background-timer')
implementation project(':react-native-calendar-events')
implementation project(':react-native-community-async-storage')
implementation(project(':react-native-fast-image')) {
exclude group: 'com.android.support'
}
implementation project(':react-native-immersive')
implementation project(':react-native-keep-awake')
implementation project(':react-native-linear-gradient')
@@ -152,6 +149,8 @@ android.libraryVariants.all { def variant ->
from("${projectDir}/../../sounds/incomingMessage.wav")
from("${projectDir}/../../sounds/joined.wav")
from("${projectDir}/../../sounds/left.wav")
from("${projectDir}/../../sounds/liveStreamingOn.mp3")
from("${projectDir}/../../sounds/liveStreamingOff.mp3")
from("${projectDir}/../../sounds/outgoingRinging.wav")
from("${projectDir}/../../sounds/outgoingStart.wav")
from("${projectDir}/../../sounds/recordingOn.mp3")

View File

@@ -21,6 +21,7 @@ import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;
@@ -47,7 +48,12 @@ public class JitsiMeetOngoingConferenceService extends Service
Intent intent = new Intent(context, JitsiMeetOngoingConferenceService.class);
intent.setAction(Actions.START);
ComponentName componentName = context.startService(intent);
ComponentName componentName;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
componentName = context.startForegroundService(intent);
} else {
componentName = context.startService(intent);
}
if (componentName == null) {
Log.w(TAG, "Ongoing conference service not started");
}
@@ -82,8 +88,13 @@ public class JitsiMeetOngoingConferenceService extends Service
final String action = intent.getAction();
if (action.equals(Actions.START)) {
Notification notification = OngoingNotification.buildOngoingConferenceNotification();
startForeground(OngoingNotification.NOTIFICATION_ID, notification);
Log.i(TAG, "Service started");
if (notification == null) {
stopSelf();
Log.w(TAG, "Couldn't start service, notification is null");
} else {
startForeground(OngoingNotification.NOTIFICATION_ID, notification);
Log.i(TAG, "Service started");
}
} else if (action.equals(Actions.HANGUP)) {
Log.i(TAG, "Hangup requested");
// Abort all ongoing calls

View File

@@ -29,6 +29,17 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.devsupport.DevInternalSettings;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.uimanager.ViewManager;
import com.oney.WebRTCModule.RTCVideoViewManager;
import com.oney.WebRTCModule.WebRTCModule;
import org.webrtc.SoftwareVideoDecoderFactory;
import org.webrtc.SoftwareVideoEncoderFactory;
import org.webrtc.VideoDecoderFactory;
import org.webrtc.VideoEncoderFactory;
import org.webrtc.audio.AudioDeviceModule;
import org.webrtc.audio.JavaAudioDeviceModule;
import org.webrtc.voiceengine.WebRtcAudioManager;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
@@ -47,8 +58,7 @@ class ReactInstanceManagerHolder {
*/
private static ReactInstanceManager reactInstanceManager;
private static List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
private static List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> nativeModules
= new ArrayList<>(Arrays.<NativeModule>asList(
new AndroidSettingsModule(reactContext),
@@ -66,6 +76,21 @@ class ReactInstanceManagerHolder {
nativeModules.add(new RNConnectionService(reactContext));
}
// Initialize the WebRTC module by hand, since we want to override some
// initialization options.
WebRTCModule.Options options = new WebRTCModule.Options();
AudioDeviceModule adm = JavaAudioDeviceModule.builder(reactContext)
.createAudioDeviceModule();
VideoDecoderFactory videoDecoderFactory = new SoftwareVideoDecoderFactory();
VideoEncoderFactory videoEncoderFactory = new SoftwareVideoEncoderFactory();
options.setAudioDeviceModule(adm);
options.setVideoDecoderFactory(videoDecoderFactory);
options.setVideoEncoderFactory(videoEncoderFactory);
nativeModules.add(new WebRTCModule(reactContext, options));
try {
Class<?> amplitudeModuleClass = Class.forName("org.jitsi.meet.sdk.AmplitudeModule");
Constructor constructor = amplitudeModuleClass.getConstructor(ReactApplicationContext.class);
@@ -77,6 +102,13 @@ class ReactInstanceManagerHolder {
return nativeModules;
}
private static List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Arrays.<ViewManager>asList(
// WebRTC, see createNativeModules for details.
new RTCVideoViewManager()
);
}
/**
* Helper function to send an event to JavaScript.
*
@@ -155,11 +187,9 @@ class ReactInstanceManagerHolder {
new com.BV.LinearGradient.LinearGradientPackage(),
new com.calendarevents.CalendarEventsPackage(),
new com.corbt.keepawake.KCKeepAwakePackage(),
new com.dylanvann.fastimage.FastImageViewPackage(),
new com.facebook.react.shell.MainReactPackage(),
new com.oblador.vectoricons.VectorIconsPackage(),
new com.ocetnik.timer.BackgroundTimerPackage(),
new com.oney.WebRTCModule.WebRTCModulePackage(),
new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(),
new com.reactnativecommunity.webview.RNCWebViewPackage(),
new com.rnimmersive.RNImmersivePackage(),
@@ -169,6 +199,10 @@ class ReactInstanceManagerHolder {
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return ReactInstanceManagerHolder.createNativeModules(reactContext);
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return ReactInstanceManagerHolder.createViewManagers(reactContext);
}
}));
try {

View File

@@ -144,8 +144,7 @@ class WiFiStatsModule
JSONObject result = new JSONObject();
result.put("rssi", rssi)
.put("signal", signalLevel)
.put("timestamp",
String.valueOf(System.currentTimeMillis()));
.put("timestamp", System.currentTimeMillis());
JSONArray addresses = new JSONArray();

View File

@@ -7,8 +7,6 @@ include ':react-native-calendar-events'
project(':react-native-calendar-events').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-calendar-events/android')
include ':react-native-community-async-storage'
project(':react-native-community-async-storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/async-storage/android')
include ':react-native-fast-image'
project(':react-native-fast-image').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fast-image/android')
include ':react-native-google-signin'
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-signin/android')
include ':react-native-immersive'

View File

@@ -23,7 +23,8 @@ import {
sendAnalytics
} from './react/features/analytics';
import {
redirectWithStoredParams,
maybeRedirectToWelcomePage,
redirectToStaticPage,
reloadWithStoredParams
} from './react/features/app';
@@ -43,6 +44,7 @@ import {
conferenceWillJoin,
conferenceWillLeave,
dataChannelOpened,
kickedOut,
lockStateChanged,
onStartMutedPolicyChanged,
p2pStatusChanged,
@@ -96,15 +98,12 @@ import {
createLocalTracksF,
destroyLocalTracks,
isLocalTrackMuted,
isUserInteractionRequiredForUnmute,
replaceLocalTrack,
trackAdded,
trackRemoved
} from './react/features/base/tracks';
import {
getLocationContextRoot,
getJitsiMeetGlobalNS
} from './react/features/base/util';
import { notifyKickedOut } from './react/features/conference';
import { getJitsiMeetGlobalNS } from './react/features/base/util';
import { addMessage } from './react/features/chat';
import { showDesktopPicker } from './react/features/desktop-picker';
import { appendSuffix } from './react/features/display-name';
@@ -112,10 +111,8 @@ import {
maybeOpenFeedbackDialog,
submitFeedback
} from './react/features/feedback';
import {
mediaPermissionPromptVisibilityChanged,
suspendDetected
} from './react/features/overlay';
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
import { suspendDetected } from './react/features/power-monitor';
import { setSharedVideoStatus } from './react/features/shared-video';
import { isButtonEnabled } from './react/features/toolbox';
import { endpointMessageReceived } from './react/features/subtitles';
@@ -211,77 +208,6 @@ function muteLocalVideo(muted) {
APP.store.dispatch(setVideoMuted(muted));
}
/**
* Check if the welcome page is enabled and redirects to it.
* If requested show a thank you dialog before that.
* If we have a close page enabled, redirect to it without
* showing any other dialog.
*
* @param {object} options used to decide which particular close page to show
* or if close page is disabled, whether we should show the thankyou dialog
* @param {boolean} options.showThankYou - whether we should
* show thank you dialog
* @param {boolean} options.feedbackSubmitted - whether feedback was submitted
*/
function maybeRedirectToWelcomePage(options) {
// if close page is enabled redirect to it, without further action
if (config.enableClosePage) {
const { isGuest } = APP.store.getState()['features/base/jwt'];
// save whether current user is guest or not, before navigating
// to close page
window.sessionStorage.setItem('guest', isGuest);
redirectToStaticPage(`static/${
options.feedbackSubmitted ? 'close.html' : 'close2.html'}`);
return;
}
// else: show thankYou dialog only if there is no feedback
if (options.showThankYou) {
APP.store.dispatch(showNotification({
titleArguments: { appName: interfaceConfig.APP_NAME },
titleKey: 'dialog.thankYou'
}));
}
// if Welcome page is enabled redirect to welcome page after 3 sec, if
// there is a thank you message to be shown, 0.5s otherwise.
if (config.enableWelcomePage) {
setTimeout(
() => {
APP.store.dispatch(redirectWithStoredParams('/'));
},
options.showThankYou ? 3000 : 500);
}
}
/**
* Assigns a specific pathname to window.location.pathname taking into account
* the context root of the Web app.
*
* @param {string} pathname - The pathname to assign to
* window.location.pathname. If the specified pathname is relative, the context
* root of the Web app will be prepended to the specified pathname before
* assigning it to window.location.pathname.
* @return {void}
*/
function redirectToStaticPage(pathname) {
const windowLocation = window.location;
let newPathname = pathname;
if (!newPathname.startsWith('/')) {
// A pathname equal to ./ specifies the current directory. It will be
// fine but pointless to include it because contextRoot is the current
// directory.
newPathname.startsWith('./')
&& (newPathname = newPathname.substring(2));
newPathname = getLocationContextRoot(windowLocation) + newPathname;
}
windowLocation.pathname = newPathname;
}
/**
* A queue for the async replaceLocalTrack action so that multiple audio
* replacements cannot happen simultaneously. This solves the issue where
@@ -347,7 +273,7 @@ class ConferenceConnector {
case JitsiConferenceErrors.NOT_ALLOWED_ERROR: {
// let's show some auth not allowed page
redirectToStaticPage('static/authError.html');
APP.store.dispatch(redirectToStaticPage('static/authError.html'));
break;
}
@@ -629,8 +555,7 @@ export default {
// Resolve with no tracks
tryCreateLocalTracks = Promise.resolve([]);
} else {
tryCreateLocalTracks = createLocalTracksF(
{ devices: initialDevices }, true)
tryCreateLocalTracks = createLocalTracksF({ devices: initialDevices }, true)
.catch(err => {
if (requestedAudio && requestedVideo) {
@@ -734,8 +659,11 @@ export default {
options.roomName, {
startAudioOnly: config.startAudioOnly,
startScreenSharing: config.startScreenSharing,
startWithAudioMuted: config.startWithAudioMuted || config.startSilent,
startWithAudioMuted: config.startWithAudioMuted
|| config.startSilent
|| isUserInteractionRequiredForUnmute(APP.store.getState()),
startWithVideoMuted: config.startWithVideoMuted
|| isUserInteractionRequiredForUnmute(APP.store.getState())
}))
.then(([ tracks, con ]) => {
tracks.forEach(track => {
@@ -836,6 +764,13 @@ export default {
* dialogs in case of media permissions error.
*/
muteAudio(mute, showUI = true) {
if (!mute
&& isUserInteractionRequiredForUnmute(APP.store.getState())) {
logger.error('Unmuting audio requires user interaction');
return;
}
// Not ready to modify track's state yet
if (!this._localTracksInitialized) {
// This will only modify base/media.audio.muted which is then synced
@@ -899,6 +834,13 @@ export default {
* dialogs in case of media permissions error.
*/
muteVideo(mute, showUI = true) {
if (!mute
&& isUserInteractionRequiredForUnmute(APP.store.getState())) {
logger.error('Unmuting video requires user interaction');
return;
}
// If not ready to modify track's state yet adjust the base/media
if (!this._localTracksInitialized) {
// This will only modify base/media.video.muted which is then synced
@@ -1018,17 +960,15 @@ export default {
* Returns the connection times stored in the library.
*/
getConnectionTimes() {
return this._room.getConnectionTimes();
return room.getConnectionTimes();
},
// used by torture currently
isJoined() {
return this._room
&& this._room.isJoined();
return room && room.isJoined();
},
getConnectionState() {
return this._room
&& this._room.getConnectionState();
return room && room.getConnectionState();
},
/**
@@ -1037,8 +977,7 @@ export default {
* P2P connection
*/
getP2PConnectionState() {
return this._room
&& this._room.getP2PConnectionState();
return room && room.getP2PConnectionState();
},
/**
@@ -1047,7 +986,7 @@ export default {
*/
_startP2P() {
try {
this._room && this._room.startP2PSession();
room && room.startP2PSession();
} catch (error) {
logger.error('Start P2P failed', error);
throw error;
@@ -1060,7 +999,7 @@ export default {
*/
_stopP2P() {
try {
this._room && this._room.stopP2PSession();
room && room.stopP2PSession();
} catch (error) {
logger.error('Stop P2P failed', error);
throw error;
@@ -1075,7 +1014,7 @@ export default {
* false otherwise.
*/
isConnectionInterrupted() {
return this._room.isConnectionInterrupted();
return room.isConnectionInterrupted();
},
/**
@@ -1136,7 +1075,7 @@ export default {
},
getMyUserId() {
return this._room && this._room.myUserId();
return room && room.myUserId();
},
/**
@@ -1159,7 +1098,7 @@ export default {
* least one track.
*/
getNumberOfParticipantsWithTracks() {
return this._room.getParticipants()
return room.getParticipants()
.filter(p => p.getTracks().length > 0)
.length;
},
@@ -1297,17 +1236,34 @@ export default {
const options = config;
const nick = APP.store.getState()['features/base/settings'].displayName;
const { locationURL } = APP.store.getState()['features/base/connection'];
if (nick) {
options.displayName = nick;
}
options.applicationName = interfaceConfig.APP_NAME;
options.getWiFiStatsMethod = getJitsiMeetGlobalNS().getWiFiStats;
options.getWiFiStatsMethod = this._getWiFiStatsMethod;
options.confID = `${locationURL.host}${locationURL.pathname}`;
return options;
},
/**
* Returns the result of getWiFiStats from the global NS or does nothing
* (returns empty result).
* Fixes a concurrency problem where we need to pass a function when creating
* JitsiConference, but that method is added to the context later.
*
* @returns {Promise}
* @private
*/
_getWiFiStatsMethod() {
const gloabalNS = getJitsiMeetGlobalNS();
return gloabalNS.getWiFiStats ? gloabalNS.getWiFiStats() : Promise.resolve('{}');
},
/**
* Start using provided video stream.
* Stops previous video stream.
@@ -1323,7 +1279,7 @@ export default {
this.localVideo = newStream;
this._setSharingScreen(newStream);
if (newStream) {
APP.UI.addLocalStream(newStream);
APP.UI.addLocalVideoStream(newStream);
}
this.setVideoMuteStatus(this.isLocalVideoMuted());
})
@@ -1374,9 +1330,6 @@ export default {
replaceLocalTrack(this.localAudio, newStream, room))
.then(() => {
this.localAudio = newStream;
if (newStream) {
APP.UI.addLocalStream(newStream);
}
this.setAudioMuteStatus(this.isLocalAudioMuted());
})
.then(resolve)
@@ -1392,8 +1345,7 @@ export default {
* @returns {boolean}
*/
isAudioOnly() {
return Boolean(
APP.store.getState()['features/base/conference'].audioOnly);
return Boolean(APP.store.getState()['features/base/audio-only'].enabled);
},
videoSwitchInProgress: false,
@@ -1757,14 +1709,7 @@ export default {
return;
}
const displayName = user.getDisplayName();
logger.log(`USER ${id} connnected:`, user);
APP.API.notifyUserJoined(id, {
displayName,
formattedDisplayName: appendSuffix(
displayName || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME)
});
APP.UI.addUser(user);
// check the roles for the new user and reflect them
@@ -1780,12 +1725,7 @@ export default {
}
logger.log(`USER ${id} LEFT:`, user);
APP.API.notifyUserLeft(id);
APP.UI.messageHandler.participantNotification(
user.getDisplayName(),
'notify.somebody',
'disconnected',
'notify.disconnected');
APP.UI.onSharedVideoStop(id);
});
@@ -1854,15 +1794,12 @@ export default {
APP.UI.setAudioLevel(id, newLvl);
});
room.on(JitsiConferenceEvents.TRACK_MUTE_CHANGED, (_, participantThatMutedUs) => {
room.on(JitsiConferenceEvents.TRACK_MUTE_CHANGED, (track, participantThatMutedUs) => {
if (participantThatMutedUs) {
APP.store.dispatch(participantMutedUs(participantThatMutedUs));
}
});
room.on(JitsiConferenceEvents.TALK_WHILE_MUTED, () => {
APP.UI.showToolbar(6000);
});
room.on(JitsiConferenceEvents.SUBJECT_CHANGED,
subject => APP.store.dispatch(conferenceSubjectChanged(subject)));
@@ -1962,7 +1899,7 @@ export default {
room.on(JitsiConferenceEvents.KICKED, participant => {
APP.UI.hideStats();
APP.store.dispatch(notifyKickedOut(participant));
APP.store.dispatch(kickedOut(room, participant));
// FIXME close
});
@@ -1973,33 +1910,6 @@ export default {
room.on(JitsiConferenceEvents.SUSPEND_DETECTED, () => {
APP.store.dispatch(suspendDetected());
// After wake up, we will be in a state where conference is left
// there will be dialog shown to user.
// We do not want video/audio as we show an overlay and after it
// user need to rejoin or close, while waking up we can detect
// camera wakeup as a problem with device.
// We also do not care about device change, which happens
// on resume after suspending PC.
if (this.deviceChangeListener) {
JitsiMeetJS.mediaDevices.removeEventListener(
JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,
this.deviceChangeListener);
}
// stop local video
if (this.localVideo) {
this.localVideo.dispose();
this.localVideo = null;
}
// stop local audio
if (this.localAudio) {
this.localAudio.dispose();
this.localAudio = null;
}
APP.API.notifySuspendDetected();
});
APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {
@@ -2255,6 +2165,27 @@ export default {
});
},
/**
* Cleanups local conference on suspend.
*/
onSuspendDetected() {
// After wake up, we will be in a state where conference is left
// there will be dialog shown to user.
// We do not want video/audio as we show an overlay and after it
// user need to rejoin or close, while waking up we can detect
// camera wakeup as a problem with device.
// We also do not care about device change, which happens
// on resume after suspending PC.
if (this.deviceChangeListener) {
JitsiMeetJS.mediaDevices.removeEventListener(
JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,
this.deviceChangeListener);
}
this.localVideo = null;
this.localAudio = null;
},
/**
* Callback invoked when the conference has been successfully joined.
* Initializes the UI and various other features.
@@ -2269,7 +2200,7 @@ export default {
if (config.requireDisplayName
&& !APP.conference.getLocalDisplayName()
&& !this._room.isHidden()) {
&& !room.isHidden()) {
APP.UI.promptDisplayName();
}
@@ -2601,7 +2532,7 @@ export default {
room = undefined;
APP.API.notifyReadyToClose();
maybeRedirectToWelcomePage(values[0]);
APP.store.dispatch(maybeRedirectToWelcomePage(values[0]));
});
},
@@ -2795,6 +2726,18 @@ export default {
*/
convertVideoToDesktop: true,
/**
* Callback invoked when the connection has been closed
* automatically. Triggers cleanup of screensharing if active.
*
* @returns {void}
*/
onConnectionClosed: () => {
if (this._untoggleScreenSharing) {
this._untoggleScreenSharing();
}
},
/**
* Callback invoked to pass messages from the local client back
* out to the external client.

View File

@@ -418,6 +418,10 @@ var config = {
// use only.
// _desktopSharingSourceDevice: 'sample-id-or-label'
// If true, any checks to handoff to another application will be prevented
// and instead the app will continue to display in the current browser.
// disableDeepLinking: false
// A property to disable the right click context menu for localVideo
// the menu has option to flip the locally seen video for local presentations
// disableLocalVideoFlip: false

31
css/_avatar.scss Normal file
View File

@@ -0,0 +1,31 @@
.avatar {
align-items: center;
background-color: #AAA;
display: flex;
border-radius: 50%;
color: rgba(255, 255, 255, 0.6);
font-weight: 100;
justify-content: center;
object-fit: cover;
}
.avatar-foreign {
align-items: center;
bottom: 0;
display: flex;
font-size: 40pt;
justify-content: center;
left: 0;
position: absolute;
right: 0;
top: 0;
}
.avatar-svg {
height: 100%;
width: 100%;
}
.defaultAvatar {
opacity: 0.6
}

View File

@@ -1,12 +1,12 @@
@font-face {
font-family: 'jitsi';
src: url('../fonts/jitsi.eot?3vw865');
src: url('../fonts/jitsi.eot?3vw865#iefix') format('embedded-opentype'),
url('../fonts/jitsi.ttf?3vw865') format('truetype'),
url('../fonts/jitsi.woff?3vw865') format('woff'),
url('../fonts/jitsi.svg?3vw865#jitsi') format('svg');
font-weight: normal;
font-style: normal;
font-family: 'jitsi';
src: url('../fonts/jitsi.eot?icrce1');
src: url('../fonts/jitsi.eot?icrce1#iefix') format('embedded-opentype'),
url('../fonts/jitsi.ttf?icrce1') format('truetype'),
url('../fonts/jitsi.woff?icrce1') format('woff'),
url('../fonts/jitsi.svg?icrce1#jitsi') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="icon-"], [class*=" icon-"] {
@@ -25,92 +25,9 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-enlarge:before {
content: "\e90a";
}
.icon-signal_cellular_0:before {
content: "\e901";
}
.icon-signal_cellular_1:before {
content: "\e902";
}
.icon-signal_cellular_2:before {
content: "\e907";
}
.icon-phone:before {
content: "\e0cd";
}
.icon-radio_button_unchecked:before {
content: "\e836";
}
.icon-radio_button_checked:before {
content: "\e837";
}
.icon-search:before {
content: "\e8b6";
}
.icon-chat-unread:before {
content: "\e0b7";
}
.icon-closed_caption:before {
content: "\e930";
}
.icon-tiles-many:before {
content: "\e92e";
}
.icon-close:before {
content: "\e5cd";
}
.icon-open_in_new:before {
content: "\e89e";
}
.icon-restore:before {
content: "\e8b3";
}
.icon-navigate_next:before {
content: "\e409";
}
.icon-menu:before {
content: "\e5d2";
}
.icon-arrow_back:before {
content: "\e5c4";
}
.icon-public:before {
content: "\e80b";
}
.icon-event_note:before {
content: "\e616";
}
.icon-bluetooth:before {
content: "\e1aa";
}
.icon-headset:before {
content: "\e310";
}
.icon-phone-talk:before {
content: "\e61d";
}
.icon-thumb-menu:before {
content: "\e5d4";
}
.icon-ninja:before {
content: "\e909";
}
.icon-invite:before {
content: "\e145";
}
.icon-add:before {
content: "\e146";
}
.icon-play:before {
content: "\f04b";
}
.icon-stop:before {
content: "\f04d";
}
.icon-dominant-speaker:before {
content: "\f0a1";
.icon-blur-background:before {
content: "\e90f";
color: #a4b8d1;
}
.icon-speaker:before {
content: "\e92d";
@@ -220,3 +137,90 @@
.icon-visibility-off:before {
content: "\e924";
}
.icon-enlarge:before {
content: "\e90a";
}
.icon-signal_cellular_0:before {
content: "\e901";
}
.icon-signal_cellular_1:before {
content: "\e902";
}
.icon-signal_cellular_2:before {
content: "\e907";
}
.icon-phone:before {
content: "\e0cd";
}
.icon-radio_button_unchecked:before {
content: "\e836";
}
.icon-radio_button_checked:before {
content: "\e837";
}
.icon-search:before {
content: "\e8b6";
}
.icon-chat-unread:before {
content: "\e0b7";
}
.icon-closed_caption:before {
content: "\e930";
}
.icon-tiles-many:before {
content: "\e92e";
}
.icon-close:before {
content: "\e5cd";
}
.icon-open_in_new:before {
content: "\e89e";
}
.icon-restore:before {
content: "\e8b3";
}
.icon-navigate_next:before {
content: "\e409";
}
.icon-menu:before {
content: "\e5d2";
}
.icon-arrow_back:before {
content: "\e5c4";
}
.icon-public:before {
content: "\e80b";
}
.icon-event_note:before {
content: "\e616";
}
.icon-bluetooth:before {
content: "\e1aa";
}
.icon-headset:before {
content: "\e310";
}
.icon-phone-talk:before {
content: "\e61d";
}
.icon-thumb-menu:before {
content: "\e5d4";
}
.icon-ninja:before {
content: "\e909";
}
.icon-invite:before {
content: "\e145";
}
.icon-add:before {
content: "\e146";
}
.icon-play:before {
content: "\f04b";
}
.icon-stop:before {
content: "\f04d";
}
.icon-dominant-speaker:before {
content: "\f0a1";
}

View File

@@ -493,7 +493,6 @@
}
#dominantSpeakerAvatarContainer,
#dominantSpeakerAvatar,
.dynamic-shadow {
width: 200px;
height: 200px;
@@ -503,14 +502,9 @@
top: 50px;
margin: auto;
position: relative;
border-radius: 100px;
overflow: hidden;
visibility: inherit;
}
#dominantSpeakerAvatar {
background-color: #000000;
object-fit: cover;
}
.dynamic-shadow {
border-radius: 50%;
@@ -524,7 +518,6 @@
.avatar-container {
@include maxSize(60px);
@include absoluteAligning();
border-radius: 50%;
display: flex;
justify-content: center;
height: 50%;

View File

@@ -86,5 +86,6 @@ $flagsImagePath: "../images/";
@import 'navigate_section_list';
@import 'third-party-branding/google';
@import 'third-party-branding/microsoft';
@import 'avatar';
/* Modules END */

7
debian/rules vendored
View File

@@ -17,8 +17,15 @@ override_dh_install: $(LANGUAGES)
dh_install -X/config.js -X/package.json
$(LANGUAGES):
LOCALE=$$(echo $@ | cut -c1-2) ; \
if [ -f $(COUNTRIES_DIR)/$@.json ] ; \
then \
dh_install -pjitsi-meet-web $(COUNTRIES_DIR)/$@.json usr/share/jitsi-meet/lang/; \
mv debian/jitsi-meet-web/usr/share/jitsi-meet/lang/$@.json debian/jitsi-meet-web/usr/share/jitsi-meet/lang/countries-$@.json; \
else \
if [ -f $(COUNTRIES_DIR)/$$LOCALE.json ] ; \
then \
dh_install -pjitsi-meet-web $(COUNTRIES_DIR)/$$LOCALE.json usr/share/jitsi-meet/lang/; \
mv debian/jitsi-meet-web/usr/share/jitsi-meet/lang/$$LOCALE.json debian/jitsi-meet-web/usr/share/jitsi-meet/lang/countries-$@.json; \
fi; \
fi;

View File

@@ -322,6 +322,13 @@ changes. The listener will receive an object with the following structure:
}
```
* **dominantSpeakerChanged** - receives event notifications about change in the dominant speaker. The listener will receive object with the following structure:
```javascript
{
id: string //participantId of the new dominant speaker
}
```
* **tileViewChanged** - event notifications about tile view layout mode being entered or exited. The listener will receive object with the following structure:
```javascript
{
@@ -372,6 +379,13 @@ changes. The listener will receive an object with the following structure:
email: string // the new email
}
```
* **feedbackSubmitted** - event notifications about conference feedback submission
```javascript
{
error: string // The error which occurred during submission, if any.
}
```
* **filmstripDisplayChanged** - event notifications about the visibility of the filmstrip being updated.
```javascript
{
@@ -387,6 +401,19 @@ changes. The listener will receive an object with the following structure:
}
```
* **participantKickedOut** - event notifications about a participants being removed from the room. The listener will receive an object with the following structure:
```javascript
{
kicked: {
id: string, // the id of the participant removed from the room
local: boolean // whether or not the participant is the local particiapnt
},
kicker: {
id: string // the id of the participant who kicked out the other participant
}
}
```
* **participantLeft** - event notifications about participants that leave the room. The listener will receive an object with the following structure:
```javascript
{

Binary file not shown.

View File

@@ -42,6 +42,7 @@
<glyph unicode="&#xe90c;" glyph-name="exit-full-screen" d="M682 682h128v-84h-212v212h84v-128zM598 214v212h212v-84h-128v-128h-84zM342 682v128h84v-212h-212v84h128zM214 342v84h212v-212h-84v128h-128z" />
<glyph unicode="&#xe90d;" glyph-name="security" d="M768 170v428h-512v-428h512zM768 682c46 0 86-38 86-84v-428c0-46-40-84-86-84h-512c-46 0-86 38-86 84v428c0 46 40 84 86 84h388v86c0 72-60 132-132 132s-132-60-132-132h-82c0 118 96 214 214 214s214-96 214-214v-86h42zM512 298c-46 0-86 40-86 86s40 86 86 86 86-40 86-86-40-86-86-86z" />
<glyph unicode="&#xe90e;" glyph-name="security-locked" d="M768 170v428h-512v-428h512zM380 768v-86h264v86c0 72-60 132-132 132s-132-60-132-132zM768 682c46 0 86-38 86-84v-428c0-46-40-84-86-84h-512c-46 0-86 38-86 84v428c0 46 40 84 86 84h42v86c0 118 96 214 214 214s214-96 214-214v-86h42zM512 298c-46 0-86 40-86 86s40 86 86 86 86-40 86-86-40-86-86-86z" />
<glyph unicode="&#xe90f;" glyph-name="blur-background" d="M469.333 640c0-47.128-38.205-85.333-85.333-85.333s-85.333 38.205-85.333 85.333c0 47.128 38.205 85.333 85.333 85.333s85.333-38.205 85.333-85.333zM725.333 640c0-47.128-38.205-85.333-85.333-85.333s-85.333 38.205-85.333 85.333c0 47.128 38.205 85.333 85.333 85.333s85.333-38.205 85.333-85.333zM469.333 384c0-47.128-38.205-85.333-85.333-85.333s-85.333 38.205-85.333 85.333c0 47.128 38.205 85.333 85.333 85.333s85.333-38.205 85.333-85.333zM426.667 170.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM682.667 170.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM213.333 384c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM213.333 640c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM896 384c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM896 640c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM426.667 853.333c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM682.667 853.333c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM725.333 384c0-47.128-38.205-85.333-85.333-85.333s-85.333 38.205-85.333 85.333c0 47.128 38.205 85.333 85.333 85.333s85.333-38.205 85.333-85.333z" />
<glyph unicode="&#xe910;" glyph-name="microphone" d="M738 554h72c0-146-116-266-256-286v-140h-84v140c-140 20-256 140-256 286h72c0-128 108-216 226-216s226 88 226 216zM512 426c-70 0-128 58-128 128v256c0 70 58 128 128 128s128-58 128-128v-256c0-70-58-128-128-128z" />
<glyph unicode="&#xe912;" glyph-name="mic-disabled" d="M182 896l714-714-54-54-178 178c-32-20-72-32-110-38v-140h-84v140c-140 20-256 140-256 286h72c0-128 108-216 226-216 34 0 68 8 98 22l-70 70c-8-2-18-4-28-4-70 0-128 58-128 128v32l-256 256zM640 548l-256 254v8c0 70 58 128 128 128s128-58 128-128v-262zM810 554c0-50-14-98-38-140l-52 54c12 26 18 54 18 86h72z" />
<glyph unicode="&#xe913;" glyph-name="link" d="M640 426c114 0 342-56 342-170v-86h-684v86c0 114 228 170 342 170zM256 598h128v-86h-128v-128h-86v128h-128v86h128v128h86v-128zM640 512c-94 0-170 76-170 170s76 172 170 172 170-78 170-172-76-170-170-170z" />

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -50,7 +50,7 @@ var interfaceConfig = {
'fodeviceselection', 'hangup', 'profile', 'info', 'chat', 'recording',
'livestreaming', 'etherpad', 'sharedvideo', 'settings', 'raisehand',
'videoquality', 'filmstrip', 'invite', 'feedback', 'stats', 'shortcuts',
'tileview'
'tileview', 'videobackgroundblur'
],
SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar' ],

View File

@@ -39,7 +39,6 @@ target 'JitsiMeet' do
pod 'react-native-background-timer', :path => '../node_modules/react-native-background-timer'
pod 'react-native-calendar-events', :path => '../node_modules/react-native-calendar-events'
pod 'react-native-fast-image', :path => '../node_modules/react-native-fast-image'
pod 'react-native-keep-awake', :path => '../node_modules/react-native-keep-awake'
pod 'react-native-webview', :path => '../node_modules/react-native-webview'
pod 'react-native-webrtc', :path => '../node_modules/react-native-webrtc'

View File

@@ -35,7 +35,6 @@ PODS:
- FirebaseCore (~> 5.2)
- GoogleUtilities/Environment (~> 5.2)
- GoogleUtilities/UserDefaults (~> 5.2)
- FLAnimatedImage (1.0.12)
- Folly (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
@@ -90,14 +89,9 @@ PODS:
- React
- react-native-calendar-events (1.6.4):
- React
- react-native-fast-image (5.1.1):
- FLAnimatedImage
- React
- SDWebImage/Core
- SDWebImage/GIF
- react-native-keep-awake (4.0.0):
- React
- react-native-webrtc (1.69.1):
- react-native-webrtc (1.69.2):
- React
- react-native-webview (5.8.1):
- React
@@ -162,10 +156,6 @@ PODS:
- React
- RNWatch (0.2.0):
- React
- SDWebImage/Core (4.4.6)
- SDWebImage/GIF (4.4.6):
- FLAnimatedImage (~> 1.0)
- SDWebImage/Core
- yoga (0.59.8.React)
DEPENDENCIES:
@@ -181,7 +171,6 @@ DEPENDENCIES:
- ObjectiveDropboxOfficial (~> 3.9.4)
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
- react-native-calendar-events (from `../node_modules/react-native-calendar-events`)
- react-native-fast-image (from `../node_modules/react-native-fast-image`)
- react-native-keep-awake (from `../node_modules/react-native-keep-awake`)
- react-native-webrtc (from `../node_modules/react-native-webrtc`)
- react-native-webview (from `../node_modules/react-native-webview`)
@@ -214,7 +203,6 @@ SPEC REPOS:
- FirebaseCore
- FirebaseDynamicLinks
- FirebaseInstanceID
- FLAnimatedImage
- GoogleAppMeasurement
- GoogleSignIn
- GoogleToolboxForMac
@@ -222,7 +210,6 @@ SPEC REPOS:
- GTMSessionFetcher
- nanopb
- ObjectiveDropboxOfficial
- SDWebImage
EXTERNAL SOURCES:
BVLinearGradient:
@@ -239,8 +226,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-background-timer"
react-native-calendar-events:
:path: "../node_modules/react-native-calendar-events"
react-native-fast-image:
:path: "../node_modules/react-native-fast-image"
react-native-keep-awake:
:path: "../node_modules/react-native-keep-awake"
react-native-webrtc:
@@ -273,7 +258,6 @@ SPEC CHECKSUMS:
FirebaseCore: 52f851b30e11360f1e67cf04b1edfebf0a47a2d3
FirebaseDynamicLinks: f209c3caccd82102caa0e91d393e3ccc593501fd
FirebaseInstanceID: bd6fc5a258884e206fd5c474ebe4f5b00e21770e
FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
Folly: de497beb10f102453a1afa9edbf8cf8a251890de
glog: aefd1eb5dda2ab95ba0938556f34b98e2da3a60d
GoogleAppMeasurement: 6cf307834da065863f9faf4c0de0a936d81dd832
@@ -286,18 +270,16 @@ SPEC CHECKSUMS:
React: 76e6aa2b87d05eb6cccb6926d72685c9a07df152
react-native-background-timer: 0d34748e53a972507c66963490c775321a88f6f2
react-native-calendar-events: ee9573e355711ac679e071be70789542431f4ce3
react-native-fast-image: 47487b71169aea34868e7b38bf870b6b3f2157c5
react-native-keep-awake: eba3137546b10003361b37c761f6c429b59814ae
react-native-webrtc: 90a847d19deb2d7323fef8cc89ca12b8995fbc90
react-native-webrtc: 1415d2a54b2246dd85ba95eb3e4bf2b66533f951
react-native-webview: a95842e3f351a6d2c8bc8bcc9eab689c7e7e5ad4
RNCAsyncStorage: 8e31405a9f12fbf42c2bb330e4560bfd79c18323
RNGoogleSignin: d030c6c6591db24c3cee649f64c7babf0a1699a0
RNSound: e157320f503bdd4f4ee6d8542e948d54f90c3c3a
RNVectorIcons: d819334932bcda3332deb3d2c8ea4d069e0b98f9
RNWatch: 09738b339eceb66e4d80a2371633ca5fb380fa42
SDWebImage: 3f3f0c02f09798048c47a5ed0a13f17b063572d8
yoga: 92b2102c3d373d1a790db4ab761d2b0ffc634f64
PODFILE CHECKSUM: b55338cc43312051ed83f8d9c6aadbd8c9402e6a
PODFILE CHECKSUM: d540f088d564bfe3b8ca3d13eec4cc0ce9c6e4bc
COCOAPODS: 1.7.2

View File

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

View File

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

View File

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

View File

@@ -27,6 +27,8 @@
0BCA496C1EC4BBF900B793EE /* jitsi.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0BCA496B1EC4BBF900B793EE /* jitsi.ttf */; };
0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; };
0F65EECE1D95DA94561BB47E /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 03F2ADC957FF109849B7FCA1 /* libPods-JitsiMeet.a */; };
C30F88D0CB0F4F5593216D24 /* liveStreamingOff.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */; };
C30F88D2CB0F4F5593216D24 /* liveStreamingOn.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */; };
6C31EDC820C06D490089C899 /* recordingOn.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC720C06D490089C899 /* recordingOn.mp3 */; };
6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC920C06D530089C899 /* recordingOff.mp3 */; };
75635B0A20751D6D00F29C9F /* joined.wav in Resources */ = {isa = PBXBuildFile; fileRef = 75635B0820751D6D00F29C9F /* joined.wav */; };
@@ -77,6 +79,8 @@
0BD906E51EC0C00300C8C18E /* JitsiMeet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JitsiMeet.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0BD906E81EC0C00300C8C18E /* JitsiMeet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeet.h; sourceTree = "<group>"; };
0BD906E91EC0C00300C8C18E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = liveStreamingOff.mp3; path = ../../sounds/liveStreamingOff.mp3; sourceTree = "<group>"; };
C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = liveStreamingOn.mp3; path = ../../sounds/liveStreamingOn.mp3; sourceTree = "<group>"; };
6C31EDC720C06D490089C899 /* recordingOn.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = recordingOn.mp3; path = ../../sounds/recordingOn.mp3; sourceTree = "<group>"; };
6C31EDC920C06D530089C899 /* recordingOff.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = recordingOff.mp3; path = ../../sounds/recordingOff.mp3; sourceTree = "<group>"; };
75635B0820751D6D00F29C9F /* joined.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = joined.wav; path = ../../sounds/joined.wav; sourceTree = "<group>"; };
@@ -135,6 +139,8 @@
0BCA496B1EC4BBF900B793EE /* jitsi.ttf */,
75635B0820751D6D00F29C9F /* joined.wav */,
75635B0920751D6D00F29C9F /* left.wav */,
C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */,
C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */,
0B49424420AD8DBD00BD2DE0 /* outgoingRinging.wav */,
0B49424320AD8DBD00BD2DE0 /* outgoingStart.wav */,
6C31EDC920C06D530089C899 /* recordingOff.mp3 */,
@@ -343,6 +349,8 @@
files = (
87FE6F3321E52437004A5DC7 /* incomingMessage.wav in Resources */,
0B49424520AD8DBD00BD2DE0 /* outgoingStart.wav in Resources */,
C30F88D0CB0F4F5593216D24 /* liveStreamingOff.mp3 in Resources */,
C30F88D2CB0F4F5593216D24 /* liveStreamingOn.mp3 in Resources */,
6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */,
A4414AE020B37F1A003546E6 /* rejected.wav in Resources */,
0B49424620AD8DBD00BD2DE0 /* outgoingRinging.wav in Resources */,

View File

@@ -42,7 +42,7 @@
*/
@property (nonatomic, nullable) JitsiMeetConferenceOptions *defaultConferenceOptions;
#pragma mak - This class is a singleton
#pragma mark - This class is a singleton
+ (instancetype _Nonnull)sharedInstance;

View File

@@ -1,5 +1,6 @@
{
"en": "Engels",
"af": "",
"az": "Azerbeidjans",
"bg": "Bulgaars",
"cs": "Tsjeggies",

View File

@@ -1,11 +1,19 @@
{
"en": "",
"bg": "",
"de": "",
"es": "",
"fr": "",
"en": "İngilis",
"af": "",
"az": "",
"bg": "Bolqar",
"cs": "",
"de": "Alman",
"el": "",
"eo": "",
"es": "İspan",
"fr": "Fransız",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
@@ -14,7 +22,6 @@
"sl": "",
"sv": "",
"tr": "",
"zhCN": "",
"nb": "",
"eo": ""
"vi": "",
"zhCN": ""
}

View File

@@ -1,18 +1,18 @@
{
"en": "Английски",
"af": "",
"az": "",
"af": "Африканс",
"az": "Азербайджански",
"bg": "Български",
"cs": "",
"cs": "Чешки",
"de": "Немски",
"el": "",
"el": "Гръцки",
"eo": "Есперанто",
"es": "Испански",
"fr": "Френски",
"hy": "Арменски",
"it": "Италиански",
"ja": "",
"ko": "",
"ja": "Японски",
"ko": "Корейски",
"nb": "Норвежки букмол",
"oc": "Окситански",
"pl": "Полски",
@@ -22,6 +22,6 @@
"sl": "Словенски",
"sv": "Шведски",
"tr": "Турски",
"vi": "",
"vi": "Виетнамски",
"zhCN": "Китайски (Китай)"
}

View File

@@ -1 +1,27 @@
{}
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"vi": "",
"zhCN": ""
}

View File

@@ -1,20 +1,27 @@
{
"en": "Angličtina",
"af": "",
"az": "",
"bg": "Bulharština",
"de": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"zhCN": "",
"nb": "",
"eo": ""
"cs": "",
"de": "Němčina",
"el": "",
"eo": "Esperanto",
"es": "Španělština",
"fr": "Francouština",
"hy": "Arménština",
"it": "Italština",
"ja": "",
"ko": "",
"nb": "Norština Bokmal",
"oc": "Okcitánština",
"pl": "Polština",
"ptBR": "Portugalština (Brazilská)",
"ru": "Ruština",
"sk": "Slovenština",
"sl": "Slovinština",
"sv": "Švédština",
"tr": "Turečtina",
"vi": "",
"zhCN": "Čínština (Čína)"
}

View File

@@ -1,5 +1,6 @@
{
"en": "Englisch",
"af": "",
"az": "",
"bg": "Bulgarisch",
"cs": "",

27
lang/languages-enGB.json Normal file
View File

@@ -0,0 +1,27 @@
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"vi": "",
"zhCN": ""
}

View File

@@ -1,20 +1,27 @@
{
"en": "Angla",
"af": "",
"az": "",
"bg": "Bulgara",
"cs": "",
"de": "Germana",
"el": "",
"eo": "Esperanto",
"es": "Hispana",
"fr": "Franca",
"hy": "Armena",
"it": "Itala",
"ja": "",
"ko": "",
"nb": "Norvega (Bukmola)",
"oc": "Okcitana",
"pl": "Pola",
"ptBR": "Portugala (Brazilo)",
"ptBR": "Portugala (Brazila)",
"ru": "Rusa",
"sk": "Slovaka",
"sl": "Slovena",
"sv": "Sveda",
"tr": "Turka",
"zhCN": "Ĉina (Ĉinujo)",
"nb": "Norvega (Bokmål)",
"eo": "Esperanto"
"vi": "",
"zhCN": "Ĉina (Ĉinuja)"
}

View File

@@ -1,11 +1,19 @@
{
"en": "Inglés",
"af": "Africano",
"az": "Azerbaijani",
"bg": "Búlgaro",
"cs": "Czech",
"de": "Alemán",
"el": "Griego",
"eo": "Esperanto",
"es": "Español",
"fr": "Francés",
"hy": "Armenio",
"it": "Italiano",
"ja": "Jopones",
"ko": "Coreano",
"nb": "Noruego (bokmal)",
"oc": "Occitano",
"pl": "Polaco",
"ptBR": "Portugués (Brasil)",
@@ -14,7 +22,6 @@
"sl": "Esloveno",
"sv": "Sueco",
"tr": "Turco",
"zhCN": "Chino (China)",
"nb": "Noruego (bokmal)",
"eo": "Esperanto"
"vi": "Vietnamita",
"zhCN": "Chino (China)"
}

27
lang/languages-esUS.json Normal file
View File

@@ -0,0 +1,27 @@
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"vi": "",
"zhCN": ""
}

View File

@@ -1,20 +1,27 @@
{
"en": "",
"bg": "",
"de": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"zhCN": "",
"nb": "",
"eo": ""
"en": "انگلیسی",
"af": "",
"az": "آذری , آذربایجان",
"bg": "بلغاری",
"cs": "چک",
"de": "آلمانی",
"el": "یونانی",
"eo": "اسپرانتو",
"es": "اسپانیایی",
"fr": "فرانسوی",
"hy": "ارمنی",
"it": "ایتالیایی",
"ja": "ژاپنی",
"ko": "کره ای",
"nb": "بوکمال نروژی",
"oc": "اکسیتان(قدیمی)",
"pl": "لهستانی",
"ptBR": "پرتغالی (برزیل)",
"ru": "روسی",
"sk": "اسلواکی",
"sl": "اسلوونیایی",
"sv": "سوئدی",
"tr": "ترکی",
"vi": "ویتنامی",
"zhCN": "چینی"
}

27
lang/languages-fi.json Normal file
View File

@@ -0,0 +1,27 @@
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"vi": "",
"zhCN": ""
}

View File

@@ -1,5 +1,6 @@
{
"en": "Anglais",
"af": "",
"az": "Azerbaïdjanais",
"bg": "Bulgare",
"cs": "Tchèque",

27
lang/languages-frCA.json Normal file
View File

@@ -0,0 +1,27 @@
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"vi": "",
"zhCN": ""
}

View File

@@ -1,27 +1,27 @@
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"vi": "",
"zhCN": ""
"en": "Engleski",
"af": "Afrikanski",
"az": "Ažerbejdžanski",
"bg": "Bugarski",
"cs": "Češki",
"de": "Njemački",
"el": "Grčki",
"eo": "Esperanto",
"es": "Španjolski",
"fr": "Francuski",
"hy": "Armenski",
"it": "Talijanski",
"ja": "Japanski",
"ko": "Korejski",
"nb": "Norveški Bokmal",
"oc": "Okcitanski",
"pl": "Poljski",
"ptBR": "Portugalski (Brazil)",
"ru": "Ruski",
"sk": "Slovački",
"sl": "Slovenski",
"sv": "Švedski",
"tr": "Turski",
"vi": "Vijetnamski",
"zhCN": "Kineski (Kina)"
}

View File

@@ -1,20 +1,27 @@
{
"en": "",
"bg": "",
"de": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"zhCN": "",
"nb": "",
"eo": ""
"en": "Angol",
"af": "",
"az": "",
"bg": "Bolgár",
"cs": "",
"de": "Német",
"el": "",
"eo": "Eszperantó",
"es": "Spanyol",
"fr": "Francia",
"hy": "Örmény",
"it": "Olasz",
"ja": "",
"ko": "",
"nb": "Norvég bokmal",
"oc": "Okszitán",
"pl": "Lengyel",
"ptBR": "Portugál (Brazil)",
"ru": "Orosz",
"sk": "Szlovák",
"sl": "Szlovén",
"sv": "Svéd",
"tr": "Török",
"vi": "",
"zhCN": "Kínai (Kína)"
}

View File

@@ -1,11 +1,19 @@
{
"en": "Անգլերեն",
"af": "",
"az": "",
"bg": "Բուլղարերեն",
"cs": "",
"de": "Գերմաներեն ",
"el": "",
"eo": "Էսպերանտո",
"es": "Իսպաներեն",
"fr": "Ֆրանսերեն",
"hy": "Հայերեն",
"it": "Իտալերեն",
"ja": "",
"ko": "",
"nb": "Նորվեգերեն",
"oc": "Օքսիտաներեն",
"pl": "Լեհերեն",
"ptBR": "Պորտուգալերեն (Բրազիլիա)",
@@ -14,7 +22,6 @@
"sl": "Սլովեներեն ",
"sv": "Շվեդերեն ",
"tr": "Թուրքերեն",
"zhCN": "Չիներեն",
"nb": "Նորվեգերեն",
"eo": "Էսպերանտո"
"vi": "",
"zhCN": "Չիներեն"
}

View File

@@ -1,5 +1,6 @@
{
"en": "Inglese",
"af": "",
"az": "Azero",
"bg": "Bulgaro",
"cs": "Ceco",

View File

@@ -1,5 +1,6 @@
{
"en": "英語",
"af": "アフリカーンス語",
"az": "アゼルバイジャン語",
"bg": "ブルガリア語",
"cs": "チェコ語",

View File

@@ -1,20 +1,27 @@
{
"en": "Taglizit",
"af": "",
"az": "",
"bg": "Tabulgarit",
"cs": "Taččikit",
"de": "Talmanit",
"es": "Taspenyult",
"el": "Tagrigit",
"eo": "Taspiṛantit",
"es": "Taspanit",
"fr": "Tafransist",
"hy": "Tarminit",
"it": "Taṭalyant",
"ja": "Tajapunit",
"ko": "Takurit",
"nb": "Tanurvijit Bukmal",
"oc": "Tuksitant",
"pl": "Tapulunit",
"ptBR": "Tapurtuɣalt (Brazil)",
"ptBR": "Tapurtugit (Brazil)",
"ru": "Tarusit",
"sk": "Tasluvakit",
"sl": "Tasluvinit",
"sv": "Taswidit",
"tr": "Taṭurkit",
"zhCN": "Tacinwat",
"nb": "Tanurvijit Bukmal",
"eo": "Taspiṛantit"
"vi": "Tavyitnamit",
"zhCN": "Tavyitnamit"
}

27
lang/languages-km.json Normal file
View File

@@ -0,0 +1,27 @@
{
"en": "អង់គ្លេស",
"af": "អាហ្វ្រិច",
"az": "Azerbaijani",
"bg": "ប៊ុលហ្គារី",
"cs": "ឆេក",
"de": "អាល្លឺម៉ង់",
"el": "ក្រិក",
"eo": "Esperanto",
"es": "អេស្ប៉ាញ",
"fr": "បារាំង",
"hy": "ភាសាអាមេនី",
"it": "អ៊ីតាលី",
"ja": "ជប៉ុន",
"ko": "កូរ៉េ",
"nb": "ន័រវេបាំម៉ាល",
"oc": "អុកស៊ីត",
"pl": "ប៉ូឡូញ",
"ptBR": "ព័រទុយហ្គាល់",
"ru": "រុស្ស៊ី",
"sk": "ស្លូវ៉ាគី",
"sl": "ស្លូវ៉ានី",
"sv": "ស៊ុយអែត",
"tr": "ទួរគី",
"vi": "វៀតណាម",
"zhCN": "ចិន (ចិន)"
}

View File

@@ -1,20 +1,27 @@
{
"en": "",
"bg": "",
"de": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"en": "영어",
"af": "",
"az": "아제르바이잔어",
"bg": "불가리어",
"cs": "체코어",
"de": "독일어",
"el": "그리스어",
"eo": "에스페란토어",
"es": "스페인어",
"fr": "프랑스어",
"hy": "아르메니아어",
"it": "이탈리아어",
"ja": "일본어",
"ko": "한국어",
"nb": "노르웨이어",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"zhCN": "",
"nb": "",
"eo": ""
"pl": "폴란드어",
"ptBR": "포르투갈어(브라질)",
"ru": "러시아어",
"sk": "슬로바키아어",
"sl": "슬로베니아어",
"sv": "스웨덴어",
"tr": "터키어",
"vi": "베트남어",
"zhCN": "중국어(중국)"
}

View File

@@ -1,11 +1,19 @@
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
@@ -14,7 +22,6 @@
"sl": "",
"sv": "",
"tr": "",
"zhCN": "",
"nb": "",
"eo": ""
"vi": "",
"zhCN": ""
}

27
lang/languages-nl.json Normal file
View File

@@ -0,0 +1,27 @@
{
"en": "",
"af": "",
"az": "",
"bg": "",
"cs": "",
"de": "",
"el": "",
"eo": "",
"es": "",
"fr": "",
"hy": "",
"it": "",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
"ru": "",
"sk": "",
"sl": "",
"sv": "",
"tr": "",
"vi": "",
"zhCN": ""
}

View File

@@ -1,12 +1,20 @@
{
"en": "Angielski",
"en": "Anglik",
"af": "",
"az": "Azerski",
"bg": "Bułgarski",
"cs": "Czeski",
"de": "Niemiecki",
"el": "Grecki",
"eo": "Esperanto",
"es": "Hiszpański",
"fr": "Francuski",
"hy": "Ormiański",
"it": "Włoski",
"oc": "Okcytański",
"ja": "Japoński",
"ko": "Koreański",
"nb": "Norweski Bokmal",
"oc": "Oksytański",
"pl": "Polski",
"ptBR": "portugalski (brazylijski)",
"ru": "Rosyjski",
@@ -14,7 +22,6 @@
"sl": "Słoweński",
"sv": "Szwedzki",
"tr": "Turecki",
"zhCN": "chiński (Chiny)",
"nb": "norweski bokmal",
"eo": "Esperanto"
"vi": "Wietnamski",
"zhCN": "Chiński (Chiny)"
}

View File

@@ -1,11 +1,19 @@
{
"en": "Английский",
"af": "",
"az": "Азербайджанский",
"bg": "Болгарский",
"cs": "Чешский",
"de": "Немецкий",
"el": "Греческий",
"eo": "Эсперанто",
"es": "Испанский",
"fr": "Французский",
"hy": "Армянский",
"it": "Итальянский",
"ja": "Японский",
"ko": "Корейский",
"nb": "Норвежский букмол",
"oc": "Окситанский",
"pl": "Польский",
"ptBR": "Португальский (Бразилия)",
@@ -14,7 +22,6 @@
"sl": "Словенский",
"sv": "Шведский",
"tr": "Турецкий",
"zhCN": "Китайский (Китай)",
"nb": "Норвежский букмол",
"eo": "Эсперанто"
"vi": "Вьетнамский",
"zhCN": "Китайский (Китай)"
}

View File

@@ -1,11 +1,19 @@
{
"en": "Angličtina",
"af": "",
"az": "",
"bg": "Bulharština",
"cs": "",
"de": "Nemčina",
"el": "",
"eo": "",
"es": "",
"fr": "Francúžtina",
"hy": "",
"it": "Taliančina",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
@@ -14,7 +22,6 @@
"sl": "Slovinčina",
"sv": "",
"tr": "Turečtina",
"zhCN": "",
"nb": "",
"eo": ""
"vi": "",
"zhCN": ""
}

View File

@@ -1,11 +1,19 @@
{
"en": "Angleščina",
"af": "",
"az": "",
"bg": "Bolgarščina",
"cs": "",
"de": "Nemščina",
"el": "",
"eo": "",
"es": "",
"fr": "Francoščina",
"hy": "",
"it": "Italjanščina",
"ja": "",
"ko": "",
"nb": "",
"oc": "",
"pl": "",
"ptBR": "",
@@ -14,7 +22,6 @@
"sl": "Slovenščina",
"sv": "",
"tr": "Turščina",
"zhCN": "",
"nb": "",
"eo": ""
"vi": "",
"zhCN": ""
}

View File

@@ -1,11 +1,19 @@
{
"en": "Engelska",
"af": "",
"az": "",
"bg": "Bulgariska",
"cs": "",
"de": "Tyska",
"el": "",
"eo": "Esperanto",
"es": "Spanska",
"fr": "Franska",
"hy": "Armeniska",
"it": "Italienska",
"ja": "",
"ko": "",
"nb": "Norska (Bokmål)",
"oc": "Occitanska",
"pl": "Polska",
"ptBR": "Portugisiska (Brasilien)",
@@ -14,7 +22,6 @@
"sl": "Slovenska",
"sv": "Svenska",
"tr": "Turkiska",
"zhCN": "Kinesiska (Kina)",
"nb": "Norska (Bokmål)",
"eo": "Esperanto"
"vi": "",
"zhCN": "Kinesiska (Kina)"
}

View File

@@ -1,11 +1,19 @@
{
"en": "İngilizce",
"af": "",
"az": "",
"bg": "Bulgarca",
"cs": "",
"de": "Almanca",
"el": "",
"eo": "Esperanto",
"es": "İspanyolca",
"fr": "Fransızca",
"hy": "Ermenice",
"it": "İtalyanca",
"ja": "",
"ko": "",
"nb": "Norveççe Bokmal",
"oc": "Oksitan dili",
"pl": "Lehçe",
"ptBR": "Portekizce (Brezilya)",
@@ -14,7 +22,6 @@
"sl": "Slovence",
"sv": "Isveççe",
"tr": "Türkçe",
"zhCN": "Çince (Tayvan)",
"nb": "Norveççe Bokmal",
"eo": "Esperanto"
"vi": "",
"zhCN": "Çince (Tayvan)"
}

View File

@@ -1,17 +1,18 @@
{
"en": "英语",
"az": "",
"af": "南非荷兰语",
"az": "阿塞拜疆语",
"bg": "保加利亚语",
"cs": "",
"cs": "捷克语",
"de": "德语",
"el": "",
"el": "希腊语",
"eo": "世界语",
"es": "西班牙语",
"fr": "法语",
"hy": "亚美尼亚语",
"it": "意大利语",
"ja": "",
"ko": "",
"ja": "日语",
"ko": "韩语",
"nb": "挪威布克摩尔语",
"oc": "欧西坦语",
"pl": "波兰语",
@@ -21,6 +22,6 @@
"sl": "斯洛文尼亚语",
"sv": "瑞典语",
"tr": "土耳其语",
"vi": "",
"vi": "越南语",
"zhCN": "中文(中国)"
}

View File

@@ -1,5 +1,6 @@
{
"en": "English",
"af": "",
"az": "Azerbaijani",
"bg": "Bulgarian",
"cs": "Czech",

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +1,18 @@
{
"addPeople": {
"add": "Покани",
"countryNotSupported": "",
"countryReminder": "",
"disabled": "",
"failedToAdd": "Добавянето на участници беше неуспешно",
"footerText": "",
"invite": "Покани",
"loading": "",
"loadingNumber": "",
"loadingPeople": "",
"countryNotSupported": "Желаната дестинация не се поддържа.",
"countryReminder": "Международно обаждане? Започнете номера с международният код!",
"disabled": "Не можете да каните хора.",
"failedToAdd": "",
"footerText": "Изходящиите разговори не са разрешени.",
"loading": "Търсене на хора и телефонни номера.",
"loadingNumber": "Валидиране на номера",
"loadingPeople": "Търсене на хора",
"noResults": "Няма резултати",
"notAvailable": "",
"noValidNumbers": "",
"searchNumbers": "",
"searchPeople": "",
"noValidNumbers": "Моля въведете телефонен номер",
"searchNumbers": "Добавяне на номера",
"searchPeople": "Търсене на хора",
"searchPeopleAndNumbers": "",
"telephone": "",
"title": ""
@@ -26,13 +24,11 @@
"speaker": "Говорещ"
},
"audioOnly": {
"audioOnly": "Само звук",
"featureToggleDisabled": "Превключването на „__feature__“ не е възможно в режим само със звук"
"audioOnly": "Само звук"
},
"calendarSync": {
"addMeetingURL": "",
"confirmAddLink": "",
"confirmAddLinkTitle": "",
"error": {
"appConfiguration": "",
"generic": "",
@@ -79,14 +75,12 @@
"bridgeCount": "",
"connectedTo": "",
"framerate": "Кадри в секунда:",
"header": "Данни за връзката",
"less": "Скриване",
"localaddress": "Локален адрес:",
"localaddress_plural": "Локални адреси:",
"localport": "Локален порт:",
"localport_plural": "Локални портове:",
"more": "Показване",
"na": "Върнете се тук за информацията относно връзката си, след като започне беседата",
"packetloss": "Загуба на пакети:",
"quality": {
"good": "Добра",
@@ -105,7 +99,6 @@
"transport_plural": "Транспорти:",
"turn": " (обръщане)"
},
"contactlist_plural": "",
"dateUtils": {
"earlier": "",
"today": "",
@@ -114,6 +107,7 @@
"deepLinking": {
"appNotInstalled": "",
"description": "",
"descriptionWithoutWeb": "",
"downloadApp": "Сваляне не приложението",
"launchWebButton": "",
"openApp": "",
@@ -121,8 +115,7 @@
"tryAgainButton": ""
},
"\u0005deepLinking": {},
"defaultLink": "напр. __url__",
"defaultNickname": "напр. Иван Иванов",
"defaultLink": "напр. {{url}}",
"deviceError": {
"cameraError": "Камерата е недостъпна",
"cameraPermission": "Грешка при получаване на разрешение за достъп до камерата",
@@ -130,7 +123,6 @@
"microphonePermission": "Грешка при получаване на разрешение за достъп до микрофона"
},
"deviceSelection": {
"deviceSettings": "Настройки на устройствата",
"noPermission": "Не е получено разрешение",
"previewUnavailable": "Няма възможност за преглед",
"selectADevice": "Изберете устройство",
@@ -138,10 +130,10 @@
},
"dialog": {
"accessibilityLabel": {
"liveStreaming": ""
"liveStreaming": "Излъчване на живо"
},
"allow": "Разрешаване",
"alreadySharedVideoMsg": "Друг участник вече споделя видео. Тази беседа позволява споделянето само на едно видео в даден момент.",
"alreadySharedVideoMsg": "",
"alreadySharedVideoTitle": "Разрешено е споделянето само на едно видео в даден момент",
"applicationWindow": "Прозореца на програмата",
"Back": "Назад",
@@ -154,43 +146,35 @@
"cameraUnsupportedResolutionError": "Камерата Ви не поддържа нужната резолюция.",
"Cancel": "Отказ",
"close": "Затваряне",
"conferenceDisconnectMsg": "Може би трябва да проверите мрежовата си връзка. Повторно свързване след __seconds__ сек…",
"conferenceDisconnectMsg": "Може би трябва да проверите мрежовата си връзка. Повторно свързване след {{seconds}} сек…",
"conferenceDisconnectTitle": "Връзката се разпадна.",
"conferenceReloadMsg": "Опитваме се да оправим нещата. Повторно свързване след __seconds__ сек…",
"conferenceReloadMsg": "Опитваме се да оправим нещата. Повторно свързване след {{seconds}} сек…",
"conferenceReloadTitle": "За съжаление, нещо се обърка.",
"confirm": "",
"confirmNo": "",
"confirmYes": "Да",
"connectError": "Опа! Нещо се обърка и не успяхме да се свържем с конференцията.",
"connectErrorWithMsg": "Опа! Нещо се обърка и не успяхме да се свържем с конференцията: __msg__",
"connectErrorWithMsg": "Опа! Нещо се обърка и не успяхме да се свържем с конференцията: {{msg}}",
"connecting": "Свързване",
"contactSupport": "Връзка с отдела по поддръжка",
"copy": "Копиране",
"currentPassword": "Текущата парола е",
"defaultError": "Възникна грешка",
"detectext": "Възникна грешка при опит да бъде намерено разширението за споделяне на екран.",
"dismiss": "Отхвърляне",
"displayNameRequired": "Изисква се екранно име",
"displayNameRequired": "",
"done": "Готово",
"doNotShowMessageAgain": "Да не се показва повече това съобщение",
"enterDisplayName": "Въведете екранното си име",
"enterDisplayName": "",
"error": "Грешка",
"externalInstallationMsg": "Трябва да инсталирате разширението за споделяне на екрана.",
"externalInstallationTitle": "Нужно е разширение",
"failedpermissions": "Неуспешен опит за получаване на права за използване на микрофон и/или камера.",
"feedbackHelp": "Вашето мнение ще ни помогне да подобрим видео услугата.",
"feedbackQuestion": "Кажете ни какво мислите за разговора!",
"goToStore": "Към магазина в Интернет",
"gracefulShutdown": "Услугата временно не е достъпна поради профилактика. Моля опитайте по-късно.",
"hungUp": "Затворихте",
"IamHost": "Аз съм домакина",
"incorrectRoomLockPassword": "",
"incorrectPassword": "Неправилно потребителско име или парола",
"inlineInstallationMsg": "Трябва да инсталирате разширението за споделяне на екрана.",
"inlineInstallExtension": "Инсталиране сега",
"internalError": "Опа! Нещо се обърка. Възникна следната грешка: __error__",
"internalError": "Опа! Нещо се обърка. Възникна следната грешка: {{error}}",
"internalErrorTitle": "Вътрешна грешка",
"joinAgain": "Присъединете се отново",
"kickMessage": "Ох! Бяхте изритан(а) от срещата!",
"kickMessage": "",
"kickParticipantButton": "",
"kickParticipantDialog": "",
"kickParticipantTitle": "",
@@ -203,51 +187,43 @@
"lockTitle": "Неуспешно заключване",
"logoutQuestion": "Сигурни ли сте, че искате да излезете и да прекъснете конференцията?",
"logoutTitle": "Изход",
"maxUsersLimitReached": "Достигнато е ограничението за максимален брой участници. Беседата е пълна. Моля, свържете се с организатора на срещата или опитайте отново по-късно!",
"maxUsersLimitReachedTitle": "Достигнато е ограничението за максимален брой участници",
"maxUsersLimitReached": "",
"maxUsersLimitReachedTitle": "",
"micConstraintFailedError": "Микрофонът Ви не покрива някои от изискванията.",
"micNotFoundError": "Не е открит микрофон.",
"micNotSendingData": "Микрофонът Ви е недостъпен. Моля, изберете друго устройство от менюто с настройките или опитайте да презаредите приложението.",
"micNotSendingDataTitle": "Микрофонът е недостъпен",
"micNotSendingData": "",
"micNotSendingDataTitle": "",
"micPermissionDeniedError": "Не сте дали разрешение за използване на микрофона. Ще можете да се присъедините в беседата, но другите няма да Ви чуват. Използвайте бутона с камерата в адресната лента, за да оправите това.",
"micUnknownError": "Не възможен достъп до микрофона по неясна причина.",
"muteParticipantBody": "Вие няма да можете да спрете заглушаването на участника, но той ще може да го направи по всяко време.",
"muteParticipantButton": "Изключи микрофона",
"muteParticipantDialog": "",
"muteParticipantTitle": "Заглушаване на този участник?",
"muteParticipantTitle": "",
"Ok": "Готово",
"oops": "Опа!",
"password": "Въведете парола",
"passwordError": "Стаята е защитена с парола. Само собственикът може да я променя или премахва.",
"passwordError2": "Стаята ви не е защитена с парола. Собственикът би могъл да добави парола.",
"passwordErrorTitle": "Грешка с паролата",
"passwordLabel": "Парола",
"passwordLabel": "",
"passwordNotSupported": "Задаването на парола за срещата не се поддържа.",
"passwordNotSupportedTitle": "Не се поддържа парола",
"passwordRequired": "Изисква се парола",
"permissionDenied": "Достъпът е отказан",
"passwordNotSupportedTitle": "",
"passwordRequired": "",
"popupError": "Браузърът Ви блокира изскачащите прозорци от този уеб сайт. Моля, разрешете изскачащите прозорци от настройките за сигурност на браузъра си и след това опитайте отново.",
"popupErrorTitle": "Блокиран изскачащ прозорец",
"recording": "Запис",
"recordingDisabledForGuestTooltip": "",
"recordingDisabledTooltip": "",
"recordingToken": "Въведете код за достъп за запис на конференцията",
"rejoinNow": "Повторно присъединяване сега",
"remoteControlAllowedMessage": "__user__ прие заявката Ви за отдалечено управление!",
"remoteControlDeniedMessage": "__user__ отказа заявката Ви за отдалечено управление!",
"remoteControlErrorMessage": "Възникна грешка при опита за искана на разрешение за отдалечено управление от __user__!",
"remoteControlRequestMessage": "Ще позволите ли на __user__ да управлява отдалечено компютъра Ви?",
"remoteControlAllowedMessage": "{{user}} прие заявката Ви за отдалечено управление!",
"remoteControlDeniedMessage": "{{user}} отказа заявката Ви за отдалечено управление!",
"remoteControlErrorMessage": "Възникна грешка при опита за искана на разрешение за отдалечено управление от {{user}}!",
"remoteControlRequestMessage": "Ще позволите ли на {{user}} да управлява отдалечено компютъра Ви?",
"remoteControlShareScreenWarning": "Ако натиснете „Разрешаване“, ще споделите екрана си!",
"remoteControlStopMessage": "Сесията за отдалечено управление приключи!",
"remoteControlTitle": "Отдалечено управление на компютъра",
"Remove": "Премахване",
"removePassword": "Премахване на паролата",
"removePassword": "",
"removeSharedVideoMsg": "Наистина ли искате да премахнете споделеното си видео?",
"removeSharedVideoTitle": "Край на споделянето на видео",
"reservationError": "Грешка в системата за резервации",
"reservationErrorMsg": "Грешка номер: __code__, съобщение: __msg__",
"reservationErrorMsg": "Грешка номер: {{code}}, съобщение: {{msg}}",
"retry": "Повторен опит",
"Save": "Запазване",
"screenSharingFailedToInstall": "Опа! Разширението за споделяне на екрана не успя да се инсталира.",
"screenSharingFailedToInstallTitle": "Разширението за споделяне на екрана не успя да се инсталира",
"screenSharingFirefoxPermissionDeniedError": "",
@@ -261,52 +237,44 @@
"shareYourScreen": "Споделяне на екрана",
"shareYourScreenDisabled": "",
"shareYourScreenDisabledForGuest": "",
"SLDFailure": "Опа! Нещо се обърка и не успяхме да спрем микрофона! (SLD Failure)",
"sorryFeedback": "Много съжаляваме! Бихте ли ни казали повече?",
"SRDFailure": "Опа! Нещо се обърка и не успяхме да спрем камерата! (SRD Failure)",
"startLiveStreaming": "",
"startRecording": "",
"startLiveStreaming": "Започване на излъчване на живо",
"startRecording": "Край на записа",
"startRemoteControlErrorMessage": "Възникна грешка при опита за започване на сесията за отдалечено управление!",
"stopLiveStreaming": "",
"stopLiveStreaming": "Спиране на излъчването на живо",
"stopRecording": "Край на записа",
"stopRecordingWarning": "Наистина ли искате да спрем записа?",
"stopStreamingWarning": "Наистина ли искате да спрете излъчването на живо?",
"streamKey": "",
"Submit": "Изпращане",
"thankYou": "Благодарим, че използвахте __appName__!",
"thankYou": "Благодарим, че използвахте {{appName}}!",
"token": "код за достъп",
"tokenAuthFailed": "Съжаляваме, но не можете да се присъедините към този разговор.",
"tokenAuthFailedTitle": "Неуспешна идентификация",
"transcribing": "",
"unableToSwitch": "Неуспешен опит за смяна на видеото.",
"unlockRoom": "",
"userPassword": "потребителска парола",
"WaitForHostMsg": "",
"WaitForHostMsgWOk": "",
"WaitingForHost": "Чакаме домакина ...",
"warning": "Внимание",
"Yes": "Да",
"yourEntireScreen": "Целия екран"
},
"\u0005dialog": {},
"dialOut": {
"statusMessage": "в момента е __status__"
"\u0005dialog": {
"accessibilityLabel": {}
},
"email": {
"and": "и",
"body": "",
"sharedKey": "",
"subject": "Покана за __appName__ (__conferenceName__)"
"dialOut": {
"statusMessage": "в момента е {{status}}"
},
"feedback": {
"average": "Средно",
"bad": "Лошо",
"detailsLabel": "",
"good": "Добра",
"rateExperience": "",
"rateExperience": "Моля, оценете качеството на срещата.",
"veryBad": "Много лошо",
"veryGood": "Много добра"
},
"\u0005feedback": {},
"incomingCall": {
"answer": "",
"audioCallTitle": "",
@@ -316,7 +284,7 @@
},
"info": {
"accessibilityLabel": "",
"addPassword": "Добавяне на парола",
"addPassword": "",
"cancelPassword": "",
"conferenceURL": "",
"country": "",
@@ -333,8 +301,7 @@
"inviteURLFirstPartGeneral": "",
"inviteURLFirstPartPersonal": "",
"inviteURLSecondPart": "",
"inviteURLMoreInfo": "",
"liveStreamURL": "",
"liveStreamURL": "Излъчване на живо",
"moreNumbers": "",
"noNumbers": "",
"noPassword": "Няма",
@@ -345,10 +312,9 @@
"tooltip": "",
"label": ""
},
"\u0005info": {},
"inviteDialog": {
"alertOk": "Готово",
"alertText": "",
"alertTitle": "Покани",
"header": "Покани",
"searchCallOnlyPlaceholder": "Въведете телефонен номер",
"searchPeopleOnlyPlaceholder": "",
@@ -361,11 +327,10 @@
"support": "Поддръжка",
"supportMsg": "Ако това се случва често, свържете се с нашата"
},
"inviteUrlDefaultMsg": "Конференцията се създава...",
"keyboardShortcuts": {
"focusLocal": "Фокусиране върху Вашето видео",
"focusRemote": "",
"fullScreen": "",
"focusRemote": "Фокусиране върху видеото на друг участник",
"fullScreen": "Влизане/излизане от режим на цял екран",
"keyboardShortcuts": "Клавишни комбинации",
"localRecording": "",
"mute": "Спиране/пускане на микрофона",
@@ -378,10 +343,10 @@
"toggleShortcuts": "",
"videoMute": "Пускане/спиране на камерата"
},
"\u0005keyboardShortcuts": {},
"liveStreaming": {
"busy": "Работим върху това да освободим ресурси за излъчване. Моля, опитайте отново след няколко минути.",
"busyTitle": "Всички излъчватели в момента са заети.",
"buttonTooltip": "Пускане/спиране на излъчването на живо",
"changeSignIn": "",
"choose": "",
"chooseCTA": "",
@@ -403,10 +368,11 @@
"signIn": "",
"signInCTA": "",
"signOut": "",
"start": "",
"start": "Започване на излъчване на живо",
"streamIdHelp": "",
"unavailableTitle": "Излъчването на живо е недостъпно"
},
"\u0005liveStreaming": {},
"localRecording": {
"clientState": {
"off": "",
@@ -432,10 +398,13 @@
"participant": "Участник",
"participantStats": "",
"sessionToken": "",
"start": "",
"stop": "",
"start": "Край на записа",
"stop": "Край на записа",
"yes": "Да"
},
"\u0005localRecording": {},
"lockRoomPassword": "парола",
"lockRoomPasswordUppercase": "Парола",
"me": "аз",
"notify": {
"connectedOneMember": "",
@@ -443,57 +412,65 @@
"connectedTwoMembers": "",
"disconnected": "Връзка:",
"focus": "Конферентен фокус",
"focusFail": "__component__ не е на раположения - следващ опит след __ms__ секунди",
"grantedTo": "Даване на роля модератор на __to__!",
"focusFail": "{{component}} не е на раположения - следващ опит след {{ms}} секунди",
"grantedTo": "Даване на роля модератор на {{to}}!",
"invitedOneMember": "",
"invitedThreePlusMembers": "",
"invitedTwoMembers": "",
"kickParticipant": "",
"me": "Аз",
"moderator": "Придобихте права на модератор!",
"muted": "Започвате разговора без звук.",
"mutedTitle": "Звукът ви е спрян!",
"mutedRemotelyTitle": "",
"mutedRemotelyDescription": "",
"passwordRemovedRemotely": "",
"passwordSetRemotely": "",
"raisedHand": "",
"somebody": "Някой",
"startSilentTitle": "",
"startSilentDescription": "",
"suboptimalExperienceDescription": "",
"suboptimalExperienceTitle": "",
"unmute": "",
"newDeviceCameraTitle": "",
"newDeviceAudioTitle": "",
"newDeviceAction": ""
},
"passwordSetRemotely": "зададена от друг участник",
"passwordSetRemotely": "",
"passwordDigitsOnly": "",
"poweredby": "с подкрепата на",
"presenceStatus": {
"busy": "",
"calling": "",
"connected": "Свързан",
"connecting": "",
"connecting2": "",
"connecting": "Свързване",
"connecting2": "Свързване",
"disconnected": "Изключен",
"expired": "",
"ignored": "",
"initializingCall": "",
"invited": "",
"invited": "Покани",
"rejected": "",
"ringing": ""
},
"\u0005presenceStatus": {},
"profile": {
"setDisplayNameLabel": "Задайте екранното си име",
"setEmailInput": "Въведете е-поща",
"setEmailLabel": "Задайте е-пощата си в „gravatar“",
"title": "Профил"
},
"raisedHand": "Иска думата",
"recentList": {
"joinPastMeeting": ""
},
"recording": {
"authDropboxText": "",
"availableSpace": "",
"beta": "",
"busy": "Работим върху това да освободим ресурси за запис. Моля, опитайте отново след няколко минути.",
"busyTitle": "Всички възможности за запис в момента са заети",
"buttonTooltip": "Пускане/спиране на записа",
"error": "Грешка при опит за запис. Моля опитайте отново.",
"expandedOff": "",
"expandedOff": "Записът спрян",
"expandedOn": "",
"expandedPending": "",
"expandedPending": "Записът започна",
"failedToStart": "Неуспешен опит за записване",
"fileSharingdescription": "",
"live": "",
@@ -506,23 +483,21 @@
"serviceName": "",
"signIn": "",
"signOut": "",
"startRecordingBody": "",
"unavailable": "",
"unavailableTitle": "Записът е невъзможен"
},
"\u0005recording": {},
"sectionList": {
"pullToRefresh": ""
},
"settings": {
"audioVideo": "ЗВУК И ВИДЕО",
"calendar": {
"about": "",
"disconnect": "",
"disconnect": "Изключен",
"microsoftSignIn": "",
"signedIn": "",
"title": ""
},
"cameraAndMic": "Камера и микрофон",
"devices": "",
"followMe": "Всички ме следват",
"language": "",
@@ -531,14 +506,15 @@
"more": "",
"name": "Име",
"noDevice": "Няма",
"password": "ЗАДАВАНЕ НА ПАРОЛА",
"selectAudioOutput": "Звуков изход",
"selectCamera": "Камера",
"selectMic": "Микрофон",
"startAudioMuted": "Всички започват заглушени",
"startVideoMuted": "Всички започват скрити",
"title": "Настройки",
"update": "Актуализиране"
"title": "Настройки"
},
"\u0005settings": {
"calendar": {}
},
"settingsView": {
"alertOk": "",
@@ -561,16 +537,16 @@
},
"speaker": "Говорещ",
"speakerStats": {
"hours": "__count__ч",
"minutes": "__count__мин",
"hours": "{{count}}ч",
"minutes": "{{count}}мин",
"name": "Име",
"seconds": "__count__сек",
"seconds": "{{count}}сек",
"speakerStats": "Статистика на говорителя",
"speakerTime": "Време на говорене"
},
"startupoverlay": {
"policyText": " ",
"title": "„__app__се нуждае от достъп до микрофона и камерата."
"title": "„{{app}}се нуждае от достъп до микрофона и камерата."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Повторно присъединяване",
@@ -584,7 +560,7 @@
"callQuality": "",
"cc": "",
"chat": "",
"document": "",
"document": "Отваряне/затваряне на споделен документ",
"feedback": "",
"fullScreen": "",
"hangup": "",
@@ -605,53 +581,45 @@
"shareRoom": "",
"shareYourScreen": "",
"shortcuts": "",
"show": "",
"speakerStats": "",
"tileView": "",
"toggleCamera": "",
"videomute": ""
"videomute": "",
"videoblur": ""
},
"addPeople": "Добавяне на участници в разговора",
"audioonly": "",
"audioOnlyOff": "",
"audioOnlyOn": "",
"audioRoute": "",
"authenticate": "Идентификация",
"callQuality": "",
"cameraDisabled": "Не е налична камера",
"chat": "Отваряне/затваряне на текстовите съобщения",
"closeChat": "",
"documentClose": "",
"documentOpen": "",
"documentClose": "Отваряне/затваряне на споделен документ",
"documentOpen": "Отваряне/затваряне на споделен документ",
"enterFullScreen": "",
"enterTileView": "",
"etherpad": "Отваряне/затваряне на споделен документ",
"exitFullScreen": "",
"exitTileView": "",
"feedback": "",
"filmstrip": "Показване/скриване на видеата",
"fullscreen": "Влизане/излизане от режим на цял екран",
"hangup": "Напускане",
"invite": "Поканете участници",
"lock": "Заключване/отключване на стаята",
"login": "Влез",
"logout": "Изход",
"lowerYourHand": "",
"micDisabled": "Не е наличен микрофон",
"micMutedPopup": "Микрофонът Ви беше заглушен, за да можете да се насладите на споделеното видео.",
"moreActions": "",
"mute": "Спиране/пускане на микрофона",
"openChat": "",
"pip": "",
"profile": "Редактиране на профила",
"raiseHand": "Вдигане/сваляне на ръка",
"raiseYourHand": "",
"raiseYourHand": "Вдигни ръка.",
"Settings": "Настройки",
"sharedvideo": "Пускане/спиране на споделянето на екрана",
"sharedVideoMutedPopup": "Вашето споделено видео беше заглушено, за да можете да говорите с другите участници.",
"shareRoom": "",
"shortcuts": "",
"sip": "Обаждане на SIP-номер",
"speakerStats": "",
"speakerStats": "Статистика на говорителя",
"startScreenSharing": "",
"startSubtitles": "",
"stopScreenSharing": "",
@@ -660,12 +628,16 @@
"talkWhileMutedPopup": "Опитвате се да говорите? В момента микрофонът Ви е заглушен.",
"tileViewToggle": "",
"toggleCamera": "",
"unableToUnmutePopup": "Не можете да пуснете микрофона докато гледате споделено видео.",
"videomute": "Пускане/спиране на камерата"
"videomute": "Пускане/спиране на камерата",
"startvideoblur": "",
"stopvideoblur": ""
},
"\u0005toolbar": {
"accessibilityLabel": {}
},
"transcribing": {
"ccButtonTooltip": "",
"error": "",
"error": "Грешка при опит за запис. Моля опитайте отново.",
"expandedLabel": "",
"failedToStart": "",
"labelToolTip": "",
@@ -675,6 +647,7 @@
"stop": "",
"tr": ""
},
"\u0005transcribing": {},
"userMedia": {
"androidGrantPermissions": "Изберете <b><i>Разрешаване</i></b>, когато браузърът Ви помоли за разрешение.",
"chromeGrantPermissions": "Изберете <b><i>Разрешаване</i></b>, когато браузърът Ви помоли за разрешение.",
@@ -695,32 +668,24 @@
"errorInviteFailed": "",
"errorInviteFailedTitle": "",
"errorInviteTitle": "",
"pending": "",
"serviceName": "",
"unavailableTitle": "Услугата не е налична"
"pending": ""
},
"\u0005videoSIPGW": {},
"videoStatus": {
"audioOnly": "",
"audioOnlyExpanded": "",
"callQuality": "Качество на разговора",
"callQuality": "",
"hd": "ВК",
"hdTooltip": "",
"highDefinition": "Високо качество",
"labelTooiltipNoVideo": "",
"labelTooltipAudioOnly": "Включен е режим само със звук",
"labelTooltipVideo": "Текущо качество на видеото",
"ld": "НК",
"ldTooltip": "",
"lowDefinition": "Ниско качество",
"onlyAudioAvailable": "",
"onlyAudioSupported": "",
"p2pEnabled": "Вкл. директно свързване",
"p2pVideoQualityDescription": "В режима на директно свързване качеството на разговора може да бъде превключено само между ниско и високо качество на звука. Всички други настройки ще бъдат пренебрегнати до излизане от режима на директно свързване.",
"qualityButtonTip": "Промяна на качеството на получаваното видео",
"p2pVideoQualityDescription": "",
"recHighDefinitionOnly": "Ще се предпочита високо качество.",
"sd": "СК",
"sdTooltip": "",
"standardDefinition": "Стандартно качество"
},
"videothumbnail": {
@@ -728,10 +693,11 @@
"flip": "Огледално",
"kick": "Изгони",
"moderator": "Модератор",
"mute": "Участникът е заглушен",
"mute": "Учасника е с изключен микрофон",
"muted": "Изключен микрофон",
"remoteControl": "Отдалечено управление",
"videomute": "Участникът спря камерата си"
"show": "",
"videomute": ""
},
"welcomepage": {
"accessibilityLabel": {
@@ -754,6 +720,7 @@
"recentList": "",
"recentListDelete": "",
"recentListEmpty": "",
"reducedUIText": "",
"roomname": "Въведете име на стаята",
"roomnameHint": "",
"sendFeedback": "Изпращане на отзиви",

View File

@@ -1,38 +1,34 @@
{
"addPeople": {
"add": "",
"add": "Convida",
"countryNotSupported": "Encara no és possible usar aquesta destinació.",
"countryReminder": "Truqueu des de fora els EUA? Assegureu-vos que comenceu b el codi de país!",
"disabled": "",
"failedToAdd": "No s'hi ha pogut afegir cap membre",
"disabled": "No podeu convidar-hi persones.",
"failedToAdd": "",
"footerText": "",
"invite": "",
"loading": "",
"loadingNumber": "S'està validant el número de telèfon",
"loadingPeople": "S'estan cercant les persones a convidar",
"noResults": "No s'ha trobat cap resultat coincident",
"notAvailable": "No podeu convidar-hi persones.",
"noValidNumbers": "Introduïu un número de telèfon",
"searchNumbers": "Afegeix-hi números de telèfon",
"searchPeople": "Cerca-hi persones",
"searchPeopleAndNumbers": "Cerca persones o n'afegeix els números de telèfon",
"telephone": "Telèfon: __number__",
"telephone": "Telèfon: {{number}}",
"title": "Convida persones a aquesta reunió"
},
"audioDevices": {
"bluetooth": "Bluetooth",
"headphones": "Auriculars",
"phone": "Telèfon",
"speaker": ""
"speaker": "Altaveu"
},
"audioOnly": {
"audioOnly": "Només l'àudio",
"featureToggleDisabled": ""
"audioOnly": "Només l'àudio"
},
"calendarSync": {
"addMeetingURL": "Afegeix un enllaç de reunió",
"confirmAddLink": "",
"confirmAddLinkTitle": "",
"error": {
"appConfiguration": "La integració de l'agenda no està configurada correctament.",
"generic": "S'ha produït un error. Comproveu la configuració de l'agenda o intenteu d'actualitzar-la.",
@@ -46,27 +42,30 @@
"permissionButton": "Obre la configuració",
"permissionMessage": "",
"refresh": "Actualitza l'agenda",
"today": ""
"today": "Avui"
},
"chat": {
"error": "",
"messagebox": "Introduïu text...",
"messagebox": "",
"nickname": {
"popover": "Trieu un sobrenom",
"title": "Introduïu un sobrenom per a usar el xat"
},
"title": "Xat"
},
"connectingOverlay": {
"joiningRoom": ""
},
"connection": {
"ATTACHED": "Adjunt",
"AUTHENTICATING": "S'està autenticant",
"AUTHFAIL": "",
"CONNECTED": "",
"CONNECTING": "",
"AUTHFAIL": "L'autenticació ha fallat",
"CONNECTED": "Connectat",
"CONNECTING": "S'està connectant",
"CONNFAIL": "La connexió ha fallat",
"DISCONNECTED": "",
"DISCONNECTED": "Desconnectat",
"DISCONNECTING": "S'està desconnectant",
"ERROR": "",
"ERROR": "Error",
"RECONNECTING": "S'ha produït un problema de xarxa. S'esta tornant a connectar..."
},
"connectionindicator": {
@@ -76,14 +75,12 @@
"bridgeCount": "Nombre de servidors: ",
"connectedTo": "Connectat a:",
"framerate": "",
"header": "Dades de connexió",
"less": "Menys informació",
"localaddress": "Adreça local:",
"localaddress_plural": "Adreces locals:",
"localport": "Port local:",
"localport_plural": "Ports locals:",
"more": "Més informació",
"na": "",
"packetloss": "Pèrdua de paquets:",
"quality": {
"good": "",
@@ -102,7 +99,6 @@
"transport_plural": "Transports:",
"turn": " (torn)"
},
"contactlist_plural": "__count__ membres",
"dateUtils": {
"earlier": "",
"today": "Avui",
@@ -111,14 +107,14 @@
"deepLinking": {
"appNotInstalled": "",
"description": "No ha passat res? Hem intentat iniciar la reunió en l'aplicació d'escriptori _app_. Torneu a intentar-ho en l'aplicació web _app_.",
"descriptionWithoutWeb": "",
"downloadApp": "Baixa l'aplicació",
"launchWebButton": "Inicia al web",
"openApp": "Continua en l'aplicació",
"title": "S'està iniciant la reunió en _app_....",
"tryAgainButton": "Torna-ho a intentar en l'escriptori"
},
"defaultLink": "p. ex. __url__",
"defaultNickname": "p. ex. Pere Cullera",
"defaultLink": "p. ex. {{url}}",
"deviceError": {
"cameraError": "No s'ha pogut accedir a la càmera",
"cameraPermission": "",
@@ -126,7 +122,6 @@
"microphonePermission": ""
},
"deviceSelection": {
"deviceSettings": "Configuració de l'aparell",
"noPermission": "",
"previewUnavailable": "",
"selectADevice": "Seleccioneu un aparell",
@@ -137,7 +132,7 @@
"liveStreaming": "Transmissió en directe"
},
"allow": "Permet",
"alreadySharedVideoMsg": "Un altre membre ja està compartint un vídeo. Aquesta conferència només permet un vídeo compartit a la vegada.",
"alreadySharedVideoMsg": "",
"alreadySharedVideoTitle": "Només es permet un vídeo compartit a la vegada",
"applicationWindow": "Finestra de l'aplicació",
"Back": "Enrere",
@@ -152,40 +147,32 @@
"close": "Tanca",
"conferenceDisconnectMsg": "",
"conferenceDisconnectTitle": "",
"conferenceReloadMsg": "Estem intentat de corregir-ho. Tornem a connectar en __seconds__ segons...",
"conferenceReloadMsg": "Estem intentat de corregir-ho. Tornem a connectar en {{seconds}} segons...",
"conferenceReloadTitle": "Malauradament, alguna cosa no ha anat bé.",
"confirm": "Confirmo",
"confirmNo": "",
"confirmYes": "",
"confirmNo": "No",
"confirmYes": "",
"connectError": "Vaja! Alguna cosa no ha anat bé i no podem connectar a la conferència.",
"connectErrorWithMsg": "Vaja! Alguna cosa no ha anat bé i no podem connectar a la conferència: _msg_",
"connecting": "S'està connectant",
"contactSupport": "Contacte amb l'assistència",
"copy": "Copia",
"currentPassword": "La contrasenya actual és",
"defaultError": "S'ha produït algun tipus d'error",
"detectext": "S'ha produït un error en intentar detectar l'extensió de compartició d'escriptori.",
"dismiss": "",
"displayNameRequired": "",
"done": "",
"doNotShowMessageAgain": "",
"enterDisplayName": "",
"error": "Error",
"externalInstallationMsg": "",
"externalInstallationTitle": "",
"failedpermissions": "",
"feedbackHelp": "Els vostres comentaris ens ajuden a millorar la nostra experiència de vídeo.",
"feedbackQuestion": "",
"goToStore": "",
"gracefulShutdown": "",
"hungUp": "Heu penjat",
"IamHost": "Sóc l'amfitrió",
"incorrectRoomLockPassword": "",
"incorrectPassword": "El nom o la contrasenya no són correctes",
"inlineInstallationMsg": "",
"inlineInstallExtension": "Instal·la-ho ara",
"internalError": "",
"internalErrorTitle": "",
"joinAgain": "",
"kickMessage": "",
"kickParticipantButton": "",
"kickParticipantDialog": "",
@@ -195,39 +182,32 @@
"liveStreamingDisabledForGuestTooltip": "",
"liveStreamingDisabledTooltip": "",
"lockMessage": "No s'ha pogut blocar la conferència.",
"lockRoom": "Bloca la sala",
"lockRoom": "",
"lockTitle": "El bloqueig ha fallat",
"logoutQuestion": "Esteu segur de voler tancar la sessió i aturar la conferència?",
"logoutTitle": "",
"logoutTitle": "Tanca la sessió",
"maxUsersLimitReached": "",
"maxUsersLimitReachedTitle": "",
"micConstraintFailedError": "",
"micConstraintFailedError": "La càmera no satisfà algun dels requeriments.",
"micNotFoundError": "No s'ha trobat cap micròfon.",
"micNotSendingData": "No podem accedir al micròfon. Seleccioneu un altre aparell al menú de configuració o intenteu de recarregar l'aplicació.",
"micNotSendingData": "",
"micNotSendingDataTitle": "",
"micPermissionDeniedError": "",
"micUnknownError": "",
"muteParticipantBody": "",
"muteParticipantButton": "",
"muteParticipantDialog": "",
"muteParticipantTitle": "Voleu silenciar aquest membre?",
"Ok": "",
"oops": "Vaja!",
"password": "Introduïu una contrasenya",
"passwordError": "",
"passwordError2": "",
"passwordErrorTitle": "",
"passwordLabel": "Contrasenya",
"muteParticipantTitle": "",
"Ok": "D'acord",
"passwordLabel": "",
"passwordNotSupported": "",
"passwordNotSupportedTitle": "",
"passwordRequired": "",
"permissionDenied": "S'ha denegat el permís",
"popupError": "El vostre navegador bloca les finestres emergents d'aquest lloc. Habiliteu les finestres emergents a la configuració de seguretat del navegador i torneu-ho a intentar.",
"popupErrorTitle": "Finestres emergents blocades",
"recording": "",
"recording": "Enregistrament",
"recordingDisabledForGuestTooltip": "Els convidats no poden iniciar enregistraments.",
"recordingDisabledTooltip": "",
"recordingToken": "",
"rejoinNow": "",
"remoteControlAllowedMessage": "",
"remoteControlDeniedMessage": "",
@@ -243,7 +223,6 @@
"reservationError": "",
"reservationErrorMsg": "",
"retry": "",
"Save": "",
"screenSharingFailedToInstall": "",
"screenSharingFailedToInstallTitle": "",
"screenSharingFirefoxPermissionDeniedError": "",
@@ -251,22 +230,19 @@
"screenSharingPermissionDeniedError": "",
"serviceUnavailable": "El servei no és disponible",
"sessTerminated": "La trucada ha finalitzat",
"Share": "",
"Share": "Comparteix",
"shareVideoLinkError": "Proporcioneu un enllaç de YouTube correcte.",
"shareVideoTitle": "Comparteix un vídeo",
"shareYourScreen": "Comparteix la pantalla",
"shareYourScreenDisabled": "",
"shareYourScreenDisabledForGuest": "Els convidats no poden compartir la pantalla.",
"SLDFailure": "",
"sorryFeedback": "",
"SRDFailure": "",
"startLiveStreaming": "Inicia la transmissió en directe",
"startRecording": "Inicia l'enregistrament",
"startRemoteControlErrorMessage": "",
"stopLiveStreaming": "",
"stopRecording": "",
"stopRecordingWarning": "",
"stopStreamingWarning": "",
"stopLiveStreaming": "Inicia la transmissió en directe",
"stopRecording": "Inicia l'enregistrament",
"stopRecordingWarning": "Esteu segur de voler iniciar l'enregistrament?",
"stopStreamingWarning": "Esteu segur de voler iniciar l'enregistrament?",
"streamKey": "",
"Submit": "",
"thankYou": "",
@@ -274,25 +250,18 @@
"tokenAuthFailed": "",
"tokenAuthFailedTitle": "L'autenticació ha fallat",
"transcribing": "",
"unableToSwitch": "",
"unlockRoom": "",
"userPassword": "",
"userPassword": "Introduïu una contrasenya",
"WaitForHostMsg": "",
"WaitForHostMsgWOk": "",
"WaitingForHost": "",
"warning": "",
"Yes": "",
"Yes": "",
"yourEntireScreen": ""
},
"\u0005dialog": {},
"dialOut": {
"statusMessage": ""
},
"email": {
"and": "",
"body": "",
"sharedKey": "",
"subject": ""
},
"feedback": {
"average": "",
"bad": "",
@@ -319,13 +288,16 @@
"dialInConferenceID": "",
"dialInNotSupported": "",
"dialInNumber": "",
"dialInSummaryError": "",
"dialInTollFree": "",
"genericError": "",
"inviteLiveStream": "",
"invitePhone": "",
"invitePhoneAlternatives": "",
"inviteURL": "",
"liveStreamURL": "",
"inviteURLFirstPartGeneral": "",
"inviteURLFirstPartPersonal": "",
"inviteURLSecondPart": "",
"liveStreamURL": "Transmissió en directe",
"moreNumbers": "",
"noNumbers": "",
"noPassword": "",
@@ -336,10 +308,9 @@
"tooltip": "",
"label": ""
},
"\u0005info": {},
"inviteDialog": {
"alertOk": "D'acord",
"alertText": "",
"alertTitle": "",
"header": "Convida",
"searchCallOnlyPlaceholder": "",
"searchPeopleOnlyPlaceholder": "",
@@ -352,7 +323,6 @@
"support": "",
"supportMsg": ""
},
"inviteUrlDefaultMsg": "",
"keyboardShortcuts": {
"focusLocal": "",
"focusRemote": "",
@@ -361,7 +331,7 @@
"localRecording": "",
"mute": "",
"pushToTalk": "",
"raiseHand": "",
"raiseHand": "Aixeca o abaixa la mà",
"showSpeakerStats": "",
"toggleChat": "",
"toggleFilmstrip": "",
@@ -369,15 +339,15 @@
"toggleShortcuts": "",
"videoMute": ""
},
"\u0005keyboardShortcuts": {},
"liveStreaming": {
"busy": "",
"busyTitle": "",
"buttonTooltip": "",
"changeSignIn": "",
"choose": "",
"chooseCTA": "",
"enterStreamKey": "",
"error": "",
"error": "L'enregistrament ha fallat. Torneu-ho a intentar més tard.",
"errorAPI": "",
"errorLiveStreamNotEnabled": "",
"expandedOff": "",
@@ -387,17 +357,18 @@
"getStreamKeyManually": "",
"invalidStreamKey": "",
"off": "",
"on": "",
"on": "Transmissió en directe",
"pending": "",
"serviceName": "",
"signedInAs": "",
"signIn": "",
"signInCTA": "",
"signOut": "",
"start": "",
"signOut": "Tanca la sessió",
"start": "Inicia la transmissió en directe",
"streamIdHelp": "Què és això?",
"unavailableTitle": ""
},
"\u0005liveStreaming": {},
"localRecording": {
"clientState": {
"off": "Inactiu",
@@ -411,22 +382,25 @@
"label": "",
"labelToolTip": "",
"localRecording": "",
"me": "",
"me": "Jo",
"messages": {
"engaged": "",
"finished": "",
"finishedModerator": "",
"notModerator": "No sou el moderador. No podeu iniciar ni aturar un enregistrament local."
},
"moderator": "",
"moderator": "Moderador",
"no": "No",
"participant": "",
"participantStats": "",
"sessionToken": "",
"start": "",
"stop": "",
"start": "Inicia l'enregistrament",
"stop": "Inicia l'enregistrament",
"yes": "Sí"
},
"\u0005localRecording": {},
"lockRoomPassword": "Contrasenya",
"lockRoomPasswordUppercase": "Contrasenya",
"me": "",
"notify": {
"connectedOneMember": "",
@@ -436,16 +410,31 @@
"focus": "",
"focusFail": "",
"grantedTo": "",
"invitedOneMember": "",
"invitedThreePlusMembers": "",
"invitedTwoMembers": "",
"kickParticipant": "",
"me": "Jo",
"moderator": "",
"muted": "Heu iniciat una conversa silenciada.",
"mutedTitle": "Esteu silenciat!",
"raisedHand": "Vull parlar.",
"mutedRemotelyTitle": "",
"mutedRemotelyDescription": "",
"passwordRemovedRemotely": "",
"passwordSetRemotely": "",
"raisedHand": "",
"somebody": "Algú",
"startSilentTitle": "",
"startSilentDescription": "",
"suboptimalExperienceDescription": "",
"suboptimalExperienceTitle": ""
"suboptimalExperienceTitle": "",
"unmute": "",
"newDeviceCameraTitle": "",
"newDeviceAudioTitle": "",
"newDeviceAction": ""
},
"passwordSetRemotely": "",
"passwordDigitsOnly": "",
"poweredby": "",
"presenceStatus": {
"busy": "Ocupat",
@@ -467,22 +456,18 @@
"setEmailLabel": "",
"title": ""
},
"raisedHand": "Vull parlar",
"recentList": {
"joinPastMeeting": ""
},
"recording": {
"authDropboxText": "Puja a Dropbox",
"availableSpace": "",
"beta": "BETA",
"busy": "",
"busyTitle": "",
"buttonTooltip": "Inicia o atura l'enregistrament",
"error": "L'enregistrament ha fallat. Torneu-ho a intentar més tard.",
"expandedOff": "",
"expandedOn": "",
"expandedPending": "",
"failedToStart": "",
"fileSharingdescription": "",
"live": "",
"loggedIn": "",
"off": "",
@@ -493,7 +478,6 @@
"serviceName": "Servei d'enregistrament",
"signIn": "Inicia sessió",
"signOut": "Tanca la sessió",
"startRecordingBody": "Esteu segur de voler iniciar l'enregistrament?",
"unavailable": "",
"unavailableTitle": "L'enregistrament no és disponible"
},
@@ -501,44 +485,45 @@
"pullToRefresh": ""
},
"settings": {
"audioVideo": "",
"calendar": {
"about": "",
"disconnect": "",
"disconnect": "Desconnectat",
"microsoftSignIn": "",
"signedIn": "",
"title": ""
"title": "Agenda"
},
"cameraAndMic": "Càmera i micròfon",
"devices": "Aparells",
"followMe": "Tothom em segueix",
"language": "Llengua",
"loggedIn": "",
"moderator": "",
"moderator": "Moderador",
"more": "Més",
"name": "",
"name": "Nom",
"noDevice": "",
"password": "",
"selectAudioOutput": "Sortida d'àudio",
"selectCamera": "",
"selectMic": "",
"startAudioMuted": "",
"startVideoMuted": "",
"title": "",
"update": ""
"title": "Configuració"
},
"\u0005settings": {
"calendar": {}
},
"settingsView": {
"alertOk": "D'acord",
"alertTitle": "",
"alertURLText": "L'URL introduït no és vàlid",
"buildInfoSection": "",
"conferenceSection": "Conferència",
"displayName": "Nom visible",
"email": "Adreça electrònica",
"header": "",
"header": "Configuració",
"profileSection": "",
"serverURL": "URL del servidor",
"startWithAudioMuted": "Inicia amb l'àudio silenciat",
"startWithVideoMuted": "Inicia amb el vídeo silenciat"
"startWithVideoMuted": "Inicia amb el vídeo silenciat",
"version": ""
},
"share": {
"dialInfoText": "",
@@ -550,9 +535,10 @@
"minutes": "",
"name": "Nom",
"seconds": "",
"speakerStats": "",
"speakerStats": "Estadístiques de l'interlocutor",
"speakerTime": ""
},
"\u0005speakerStats": {},
"startupoverlay": {
"policyText": "",
"title": ""
@@ -565,64 +551,58 @@
"toolbar": {
"accessibilityLabel": {
"audioOnly": "Canvia només l'àudio",
"audioRoute": "",
"audioRoute": "Seleccioneu l'aparell de so",
"callQuality": "",
"cc": "Canvia l'estat dels subtítols",
"chat": "Canvia l'estat de la finestra de xats",
"document": "Canvia el document compartit",
"feedback": "",
"feedback": "Deixa comentaris",
"fullScreen": "Activa o desactiva la pantalla completa",
"hangup": "Abandona la trucada",
"invite": "",
"kick": "",
"invite": "Convida-hi persones",
"kick": "Silencia el participant",
"localRecording": "Activa o desactiva les controls d'enregistrament local",
"lockRoom": "Activa o desactiva el bloqueig de la sala",
"lockRoom": "",
"moreActions": "Canvia el menú d'accions addicionals",
"moreActionsMenu": "Menú d'accions addicionals",
"mute": "Activa o desactiva el silenci de l'àudio",
"pip": "",
"profile": "",
"profile": "Edita el perfil",
"raiseHand": "Aixeca o abaixa la mà",
"recording": "Activa o desactiva l'enregistrament",
"remoteMute": "Silencia el participant",
"Settings": "Canvia la configuració",
"sharedvideo": "Activa o desactiva la compartició de vídeo",
"shareRoom": "",
"shareRoom": "Convida-hi algú",
"shareYourScreen": "",
"shortcuts": "",
"show": "",
"speakerStats": "",
"tileView": "",
"toggleCamera": "",
"videomute": ""
"videomute": "Activa o desactiva el silenci de l'àudio",
"videoblur": ""
},
"addPeople": "Afegeix persones a la trucada",
"audioonly": "Activa o desactiva el mode de només àudio",
"audioOnlyOff": "Desactiva el mode de només àudio",
"audioOnlyOn": "Activa el mode de només àudio",
"audioRoute": "Seleccioneu l'aparell de so",
"authenticate": "Autentica",
"callQuality": "Gestiona la qualitat de la trucada",
"cameraDisabled": "La càmera no és disponible",
"chat": "Obre o tanca el xat",
"closeChat": "Tanca el xat",
"documentClose": "Tanca el document compartit",
"documentOpen": "Obre el document compartit",
"enterFullScreen": "Mostra en pantalla completa",
"enterTileView": "",
"etherpad": "Obre o tanca el document compartit",
"exitFullScreen": "Surt de la pantalla completa",
"exitTileView": "",
"feedback": "Deixa comentaris",
"filmstrip": "Mostra o amaga vídeos",
"fullscreen": "",
"hangup": "Surt",
"invite": "Convida-hi persones",
"lock": "",
"login": "",
"logout": "Tanca la sessió",
"lowerYourHand": "",
"micDisabled": "",
"micMutedPopup": "",
"moreActions": "Accions addionals",
"mute": "",
"openChat": "Obre el xat",
@@ -632,12 +612,10 @@
"raiseYourHand": "Aixeca la mà",
"Settings": "Configuració",
"sharedvideo": "Comparteix un vídeo de YouTube",
"sharedVideoMutedPopup": "",
"shareRoom": "Convida-hi algú",
"shortcuts": "Mostra les dreceres",
"sip": "",
"speakerStats": "Estadístiques de l'interlocutor",
"startScreenSharing": "",
"startScreenSharing": "Atura la compartició de la pantalla",
"startSubtitles": "Inicia els subtítols",
"stopScreenSharing": "Atura la compartició de la pantalla",
"stopSubtitles": "Atura els subtítols",
@@ -645,8 +623,12 @@
"talkWhileMutedPopup": "Intenteu parlar? Esteu silenciat.",
"tileViewToggle": "",
"toggleCamera": "",
"unableToUnmutePopup": "",
"videomute": "Inicia o atura la càmera"
"videomute": "Inicia o atura la càmera",
"startvideoblur": "",
"stopvideoblur": ""
},
"\u0005toolbar": {
"accessibilityLabel": {}
},
"transcribing": {
"ccButtonTooltip": "Inicia o atura els subtítols",
@@ -655,11 +637,12 @@
"failedToStart": "",
"labelToolTip": "",
"off": "",
"pending": "",
"pending": "S'està preparant per a enregistrar la reunió...",
"start": "",
"stop": "",
"tr": "TR"
},
"\u0005transcribing": {},
"userMedia": {
"androidGrantPermissions": "",
"chromeGrantPermissions": "",
@@ -680,47 +663,42 @@
"errorInviteFailed": "",
"errorInviteFailedTitle": "",
"errorInviteTitle": "",
"pending": "",
"serviceName": "Servei de sales",
"unavailableTitle": ""
"pending": ""
},
"videoStatus": {
"audioOnly": "AUD",
"audioOnlyExpanded": "",
"callQuality": "Qualitat de la trucada",
"callQuality": "",
"hd": "HD",
"hdTooltip": "",
"highDefinition": "Alta definició",
"labelTooiltipNoVideo": "No hi ha vídeo",
"labelTooltipAudioOnly": "",
"labelTooltipVideo": "Qualitat de vídeo actual",
"ld": "LD",
"ldTooltip": "",
"lowDefinition": "Baixa definició",
"onlyAudioAvailable": "Només hi ha disponible l'àudio",
"onlyAudioSupported": "",
"p2pEnabled": "",
"p2pVideoQualityDescription": "",
"qualityButtonTip": "Canvia la qualitat de vídeo rebut",
"recHighDefinitionOnly": "",
"sd": "",
"sdTooltip": "",
"standardDefinition": ""
},
"videothumbnail": {
"domute": "",
"domute": "Silenciat",
"flip": "",
"kick": "",
"moderator": "Moderador",
"mute": "El membre està silenciat",
"mute": "",
"muted": "Silenciat",
"remoteControl": "Control remot",
"videomute": "El membre ha aturat la càmera"
"show": "",
"videomute": ""
},
"\u0005videothumbnail": {},
"welcomepage": {
"accessibilityLabel": {
"join": "Toqueu per a unir-vos-hi",
"roomname": ""
"roomname": "Introduïu el nom de la sala"
},
"appDescription": "",
"audioVideoSwitch": {
@@ -733,10 +711,12 @@
"enterRoomTitle": "Inicia una reunió nova",
"go": "",
"join": "",
"info": "",
"privacy": "Privadesa",
"recentList": "Recents",
"recentListDelete": "Suprimeix",
"recentListEmpty": "",
"reducedUIText": "",
"roomname": "Introduïu el nom de la sala",
"roomnameHint": "",
"sendFeedback": "",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

712
lang/main-enGB.json Normal file
View File

@@ -0,0 +1,712 @@
{
"addPeople": {
"add": "Invite",
"countryNotSupported": "We do not support this destination yet.",
"countryReminder": "Calling outside the US? Please make sure you start with the country code!",
"disabled": "You can't invite people.",
"failedToAdd": "Failed to add members",
"footerText": "Dialling out is disabled.",
"loading": "Searching for people and phone numbers",
"loadingNumber": "Validating phone number",
"loadingPeople": "Searching for people to invite",
"noResults": "No matching search results",
"noValidNumbers": "Please enter a phone number",
"searchNumbers": "Add phone numbers",
"searchPeople": "Search for people",
"searchPeopleAndNumbers": "Search for people or add their phone numbers",
"telephone": "Telephone: {{number}}",
"title": "Invite people to this meeting"
},
"audioDevices": {
"bluetooth": "Bluetooth",
"headphones": "Headphones",
"phone": "Phone",
"speaker": "Speaker"
},
"audioOnly": {
"audioOnly": "Audio only"
},
"calendarSync": {
"addMeetingURL": "Add a meeting link",
"confirmAddLink": "Do you want to add a Jitsi link to this event?",
"error": {
"appConfiguration": "Calendar integration is not properly configured.",
"generic": "An error has occurred. Please check your calendar settings or try refreshing the calendar.",
"notSignedIn": "An error occurred while authenticating to see calendar events. Please check your calendar settings and try logging in again."
},
"join": "Join",
"joinTooltip": "Join the meeting",
"nextMeeting": "next meeting",
"noEvents": "There are no upcoming events scheduled.",
"ongoingMeeting": "ongoing meeting",
"permissionButton": "Open settings",
"permissionMessage": "The Calendar permission is required to see your meetings in the app.",
"refresh": "Refresh calendar",
"today": "Today"
},
"chat": {
"error": "Error: your message \"{{originalText}}\" was not sent. Reason: {{error}}",
"messagebox": "Type a message",
"nickname": {
"popover": "Choose a nickname",
"title": "Enter a nickname to use chat"
},
"title": "Chat"
},
"connectingOverlay": {
"joiningRoom": "Connecting you to your meeting..."
},
"connection": {
"ATTACHED": "Attached",
"AUTHENTICATING": "Authenticating",
"AUTHFAIL": "Authentication failed",
"CONNECTED": "Connected",
"CONNECTING": "Connecting",
"CONNFAIL": "Connection failed",
"DISCONNECTED": "Disconnected",
"DISCONNECTING": "Disconnecting",
"ERROR": "Error",
"RECONNECTING": "A network problem occurred. Reconnecting..."
},
"connectionindicator": {
"address": "Address:",
"bandwidth": "Estimated bandwidth:",
"bitrate": "Bitrate:",
"bridgeCount": "Server count: ",
"connectedTo": "Connected to:",
"framerate": "Frame rate:",
"less": "Show less",
"localaddress": "Local address:",
"localaddress_plural": "Local addresses:",
"localport": "Local port:",
"localport_plural": "Local ports:",
"more": "Show more",
"packetloss": "Packet loss:",
"quality": {
"good": "Good",
"inactive": "Inactive",
"lost": "Lost",
"nonoptimal": "Nonoptimal",
"poor": "Poor"
},
"remoteaddress": "Remote address:",
"remoteaddress_plural": "Remote addresses:",
"remoteport": "Remote port:",
"remoteport_plural": "Remote ports:",
"resolution": "Resolution:",
"status": "Connection:",
"transport": "Transport:",
"transport_plural": "Transports:",
"turn": " (turn)"
},
"dateUtils": {
"earlier": "Earlier",
"today": "Today",
"yesterday": "Yesterday"
},
"deepLinking": {
"appNotInstalled": "You need the {{app}} mobile app to join this meeting on your phone.",
"description": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. Try again or launch it in the {{app}} web app.",
"descriptionWithoutWeb": "",
"downloadApp": "Download the app",
"launchWebButton": "Launch in web",
"openApp": "Continue to the app",
"title": "Launching your meeting in {{app}}...",
"tryAgainButton": "Try again in desktop"
},
"defaultLink": "e.g. {{url}}",
"deviceError": {
"cameraError": "Failed to access your camera",
"cameraPermission": "Error obtaining camera permission",
"microphoneError": "Failed to access your microphone",
"microphonePermission": "Error obtaining microphone permission"
},
"deviceSelection": {
"noPermission": "Permission not granted",
"previewUnavailable": "Preview unavailable",
"selectADevice": "Select a device",
"testAudio": "Play a test sound"
},
"dialog": {
"accessibilityLabel": {
"liveStreaming": "Live Stream"
},
"allow": "Allow",
"alreadySharedVideoMsg": "Another member is already sharing a video. This conference allows only one shared video at a time.",
"alreadySharedVideoTitle": "Only one shared video is allowed at a time",
"applicationWindow": "Application window",
"Back": "Back",
"cameraConstraintFailedError": "Your camera does not satisfy some of the required constraints.",
"cameraNotFoundError": "Camera was not found.",
"cameraNotSendingData": "We are unable to access your camera. Please check if another application is using this device, select another device from the settings menu or try to reload the application.",
"cameraNotSendingDataTitle": "Unable to access camera",
"cameraPermissionDeniedError": "You have not granted permission to use your camera. You can still join the conference but others won't see you. Use the camera button in the address bar to fix this.",
"cameraUnknownError": "Cannot use camera for an unknown reason.",
"cameraUnsupportedResolutionError": "Your camera does not support required video resolution.",
"Cancel": "Cancel",
"close": "Close",
"conferenceDisconnectMsg": "You may want to check your network connection. Reconnecting in {{seconds}} sec...",
"conferenceDisconnectTitle": "You have been disconnected.",
"conferenceReloadMsg": "We're trying to fix this. Reconnecting in {{seconds}} sec...",
"conferenceReloadTitle": "Unfortunately, something went wrong.",
"confirm": "Confirm",
"confirmNo": "No",
"confirmYes": "Yes",
"connectError": "Oops! Something went wrong and we couldn't connect to the conference.",
"connectErrorWithMsg": "Oops! Something went wrong and we couldn't connect to the conference: {{msg}}",
"connecting": "Connecting",
"contactSupport": "Contact support",
"copy": "Copy",
"dismiss": "Dismiss",
"displayNameRequired": "Display name is required",
"done": "Done",
"enterDisplayName": "Please enter your display name",
"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.",
"IamHost": "I am the host",
"incorrectRoomLockPassword": "",
"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": "Ouch! You have been kicked out of the meet!",
"kickParticipantButton": "Kick",
"kickParticipantDialog": "Are you sure you want to kick this participant?",
"kickParticipantTitle": "Kick this member?",
"kickTitle": "Kicked from meeting",
"liveStreaming": "Live Streaming",
"liveStreamingDisabledForGuestTooltip": "Guests can't start live streaming.",
"liveStreamingDisabledTooltip": "Start live stream disabled.",
"lockMessage": "Failed to lock the conference.",
"lockRoom": "Add meeting password",
"lockTitle": "Lock failed",
"logoutQuestion": "Are you sure you want to logout and stop the conference?",
"logoutTitle": "Log out",
"maxUsersLimitReached": "The limit for maximum number of members has been reached. The conference is full. Please contact the meeting owner or try again later!",
"maxUsersLimitReachedTitle": "Maximum members limit reached",
"micConstraintFailedError": "Your microphone does not satisfy some of the required constraints.",
"micNotFoundError": "Microphone was not found.",
"micNotSendingData": "We are unable to access your microphone. Please select another device from the settings menu or try to reload the application.",
"micNotSendingDataTitle": "Unable to access microphone",
"micPermissionDeniedError": "You have not granted permission to use your microphone. You can still join the conference but others won't hear you. Use the camera button in the address bar to fix this.",
"micUnknownError": "Cannot use microphone for an unknown reason.",
"muteParticipantBody": "You won't be able to unmute them, but they can unmute themselves at any time.",
"muteParticipantButton": "Mute",
"muteParticipantDialog": "Are you sure you want to mute this participant? You won't be able to unmute them, but they can unmute themselves at any time.",
"muteParticipantTitle": "Mute this member?",
"Ok": "Ok",
"passwordLabel": "Password",
"passwordNotSupported": "Setting a meeting password is not supported.",
"passwordNotSupportedTitle": "Password not supported",
"passwordRequired": "Password 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",
"recording": "Recording",
"recordingDisabledForGuestTooltip": "Guests can't start recordings.",
"recordingDisabledTooltip": "Start recording disabled.",
"rejoinNow": "Rejoin now",
"remoteControlAllowedMessage": "{{user}} accepted your remote control request!",
"remoteControlDeniedMessage": "{{user}} rejected your remote control request!",
"remoteControlErrorMessage": "An error occurred while trying to request remote control permissions from {{user}}!",
"remoteControlRequestMessage": "Will you allow {{user}} to remotely control your desktop?",
"remoteControlShareScreenWarning": "Note that if you press \"Allow\" you will share your screen!",
"remoteControlStopMessage": "The remote control session ended!",
"remoteControlTitle": "Remote desktop control",
"Remove": "Remove",
"removePassword": "Remove password",
"removeSharedVideoMsg": "Are you sure you would like to remove your shared video?",
"removeSharedVideoTitle": "Remove shared video",
"reservationError": "Reservation system error",
"reservationErrorMsg": "Error code: {{code}}, message: {{msg}}",
"retry": "Retry",
"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.",
"serviceUnavailable": "Service unavailable",
"sessTerminated": "Call terminated",
"Share": "Share",
"shareVideoLinkError": "Please provide a correct youtube link.",
"shareVideoTitle": "Share a video",
"shareYourScreen": "Share your screen",
"shareYourScreenDisabled": "Screen sharing disabled.",
"shareYourScreenDisabledForGuest": "Guests can't screen share.",
"startLiveStreaming": "Start live stream",
"startRecording": "Start recording",
"startRemoteControlErrorMessage": "An error occurred while trying to start the remote control session!",
"stopLiveStreaming": "Stop live stream",
"stopRecording": "Stop recording",
"stopRecordingWarning": "Are you sure you would like to stop the recording?",
"stopStreamingWarning": "Are you sure you would like to stop the live streaming?",
"streamKey": "Live stream key",
"Submit": "Submit",
"thankYou": "Thank you for using {{appName}}!",
"token": "token",
"tokenAuthFailed": "Sorry, you're not allowed to join this call.",
"tokenAuthFailedTitle": "Authentication failed",
"transcribing": "Transcribing",
"unlockRoom": "Remove meeting password",
"userPassword": "user password",
"WaitForHostMsg": "The conference <b>{{room}}</b> has not yet started. If you are the host then please authenticate. Otherwise, please wait for the host to arrive.",
"WaitForHostMsgWOk": "The conference <b>{{room}}</b> has not yet started. If you are the host then please press Ok to authenticate. Otherwise, please wait for the host to arrive.",
"WaitingForHost": "Waiting for the host ...",
"Yes": "Yes",
"yourEntireScreen": "Your entire screen"
},
"dialOut": {
"statusMessage": "is now {{status}}"
},
"feedback": {
"average": "Average",
"bad": "Bad",
"detailsLabel": "Tell us more about it.",
"good": "Good",
"rateExperience": "Rate your meeting experience",
"veryBad": "Very Bad",
"veryGood": "Very Good"
},
"incomingCall": {
"answer": "Answer",
"audioCallTitle": "Incoming call",
"decline": "Dismiss",
"productLabel": "from Jitsi Meet",
"videoCallTitle": "Incoming video call"
},
"info": {
"accessibilityLabel": "Show info",
"addPassword": "Add password",
"cancelPassword": "Cancel password",
"conferenceURL": "Link:",
"country": "Country",
"dialANumber": "To join your meeting, dial one of these numbers and then enter the pin.",
"dialInConferenceID": "PIN:",
"dialInNotSupported": "Sorry, dialling in is currently not supported.",
"dialInNumber": "Dial-in:",
"dialInSummaryError": "Error fetching dial-in info now. Please try again later.",
"dialInTollFree": "Toll Free",
"genericError": "Whoops, something went wrong.",
"inviteLiveStream": "To view the live stream of this meeting, click this link: {{url}}",
"invitePhone": "One tap audio Dial In: {{number}},,{{conferenceID}}#",
"invitePhoneAlternatives": "",
"inviteURLFirstPartGeneral": "You are invited to join a meeting.",
"inviteURLFirstPartPersonal": "{{name}} is inviting you to a meeting.\n",
"inviteURLSecondPart": "\nJoin the meeting:\n{{url}}\n",
"liveStreamURL": "Live stream:",
"moreNumbers": "More numbers",
"noNumbers": "No dial-in numbers.",
"noPassword": "None",
"noRoom": "No room was specified to dial-in into.",
"numbers": "Dial-in Numbers",
"password": "Password:",
"title": "Share",
"tooltip": "Share link and dial-in info for this meeting",
"label": "Meeting info"
},
"inviteDialog": {
"alertText": "Failed to invite some participants.",
"header": "Invite",
"searchCallOnlyPlaceholder": "Enter phone number",
"searchPeopleOnlyPlaceholder": "Search for participants",
"searchPlaceholder": "Participant or phone number",
"send": "Send"
},
"inlineDialogFailure": {
"msg": "We stumbled a bit.",
"retry": "Try again",
"support": "Support",
"supportMsg": "If this keeps happening, reach out to"
},
"keyboardShortcuts": {
"focusLocal": "Focus on your video",
"focusRemote": "Focus on another person's video",
"fullScreen": "View or exit full screen",
"keyboardShortcuts": "Keyboard shortcuts",
"localRecording": "Show or hide local recording controls",
"mute": "Mute or unmute your microphone",
"pushToTalk": "Push to talk",
"raiseHand": "Raise or lower your hand",
"showSpeakerStats": "Show speaker stats",
"toggleChat": "Open or close the chat",
"toggleFilmstrip": "Show or hide video thumbnails",
"toggleScreensharing": "Switch between camera and screen sharing",
"toggleShortcuts": "Show or hide keyboard shortcuts",
"videoMute": "Start or stop your camera"
},
"liveStreaming": {
"busy": "We're working on freeing streaming resources. Please try again in a few minutes.",
"busyTitle": "All streamers are currently busy",
"changeSignIn": "Switch accounts.",
"choose": "Choose a live stream",
"chooseCTA": "Choose a streaming option. You're currently logged in as {{email}}.",
"enterStreamKey": "Enter your YouTube live stream key here.",
"error": "Live Streaming failed. Please try again.",
"errorAPI": "An error occurred while accessing your YouTube broadcasts. Please try logging in again.",
"errorLiveStreamNotEnabled": "Live Streaming is not enabled on {{email}}. Please enable live streaming or log into an account with live streaming enabled.",
"expandedOff": "The live streaming has stopped",
"expandedOn": "The meeting is currently being streamed to YouTube.",
"expandedPending": "The live streaming is being started...",
"failedToStart": "Live Streaming failed to start",
"getStreamKeyManually": "We werent able to fetch any live streams. Try getting your live stream key from YouTube.",
"invalidStreamKey": "Live stream key may be incorrect.",
"off": "Live Streaming stopped",
"on": "Live Streaming",
"pending": "Starting Live Stream...",
"serviceName": "Live Streaming service",
"signedInAs": "You are currently signed in as:",
"signIn": "Sign in with Google",
"signInCTA": "Sign in or enter your live stream key from YouTube.",
"signOut": "Sign out",
"start": "Start a live stream",
"streamIdHelp": "What's this?",
"unavailableTitle": "Live Streaming unavailable"
},
"localRecording": {
"clientState": {
"off": "Off",
"on": "On",
"unknown": "Unknown"
},
"dialogTitle": "Local Recording Controls",
"duration": "Duration",
"durationNA": "N/A",
"encoding": "Encoding",
"label": "LOR",
"labelToolTip": "Local recording is engaged",
"localRecording": "Local Recording",
"me": "Me",
"messages": {
"engaged": "Local recording engaged.",
"finished": "Recording session {{token}} finished. Please send the recorded file to the moderator.",
"finishedModerator": "Recording session {{token}} finished. The recording of the local track has been saved. Please ask the other participants to submit their recordings.",
"notModerator": "You are not the moderator. You cannot start or stop local recording."
},
"moderator": "Moderator",
"no": "No",
"participant": "Participant",
"participantStats": "Participant Stats",
"sessionToken": "Session Token",
"start": "Start Recording",
"stop": "Stop Recording",
"yes": "Yes"
},
"lockRoomPassword": "password",
"lockRoomPasswordUppercase": "Password",
"me": "me",
"notify": {
"connectedOneMember": "{{name}} joined the meeting",
"connectedThreePlusMembers": "{{name}} and {{count}} others joined the meeting",
"connectedTwoMembers": "{{first}} and {{second}} joined the meeting",
"disconnected": "disconnected",
"focus": "Conference focus",
"focusFail": "{{component}} not available - retry in {{ms}} sec",
"grantedTo": "Moderator rights granted to {{to}}!",
"invitedOneMember": "{{name}} has been invited",
"invitedThreePlusMembers": "{{name}} and {{count}} others have been invited",
"invitedTwoMembers": "{{first}} and {{second}} have been invited",
"kickParticipant": "{{kicked}} was kicked by {{kicker}}",
"me": "Me",
"moderator": "Moderator rights granted!",
"muted": "You have started the conversation muted.",
"mutedTitle": "You're muted!",
"mutedRemotelyTitle": "You have been muted by {{participantDisplayName}}!",
"mutedRemotelyDescription": "",
"passwordRemovedRemotely": "",
"passwordSetRemotely": "",
"raisedHand": "{{name}} would like to speak.",
"somebody": "Somebody",
"startSilentTitle": "",
"startSilentDescription": "",
"suboptimalExperienceDescription": "Eer... we are afraid your experience with {{appName}} isn't going to be that great here. We are looking for ways to improve this but, until then, please try using one of the <a href='static/recommendedBrowsers.html' target='_blank'>fully supported browsers</a>.",
"suboptimalExperienceTitle": "Browser Warning",
"unmute": "",
"newDeviceCameraTitle": "New camera detected",
"newDeviceAudioTitle": "New audio device detected",
"newDeviceAction": "Use"
},
"passwordSetRemotely": "set by another member",
"passwordDigitsOnly": "Up to {{number}} digits",
"poweredby": "powered by",
"presenceStatus": {
"busy": "Busy",
"calling": "Calling...",
"connected": "Connected",
"connecting": "Connecting...",
"connecting2": "Connecting*...",
"disconnected": "Disconnected",
"expired": "Expired",
"ignored": "Ignored",
"initializingCall": "Initialising Call...",
"invited": "Invited",
"rejected": "Rejected",
"ringing": "Ringing..."
},
"profile": {
"setDisplayNameLabel": "Set your display name",
"setEmailInput": "Enter e-mail",
"setEmailLabel": "Set your gravatar email",
"title": "Profile"
},
"recording": {
"authDropboxText": "Upload to Dropbox",
"availableSpace": "Available space: {{spaceLeft}} MB (approximately {{duration}} minutes of recording)",
"beta": "BETA",
"busy": "We're working on freeing recording resources. Please try again in a few minutes.",
"busyTitle": "All recorders are currently busy",
"error": "Recording failed. Please try again.",
"expandedOff": "Recording has stopped",
"expandedOn": "The meeting is currently being recorded.",
"expandedPending": "Recording is being started...",
"failedToStart": "Recording failed to start",
"fileSharingdescription": "Share recording with meeting participants",
"live": "LIVE",
"loggedIn": "Logged in as {{userName}}",
"off": "Recording stopped",
"on": "Recording",
"pending": "Preparing to record the meeting...",
"rec": "REC",
"serviceDescription": "Your recording will be saved by the recording service",
"serviceName": "Recording service",
"signIn": "Sign in",
"signOut": "Sign out",
"unavailable": "Oops! The {{serviceName}} is currently unavailable. We're working on resolving the issue. Please try again later.",
"unavailableTitle": "Recording unavailable"
},
"sectionList": {
"pullToRefresh": "Pull to refresh"
},
"settings": {
"calendar": {
"about": "The {{appName}} calendar integration is used to securely access your calendar so it can read upcoming events.",
"disconnect": "Disconnect",
"microsoftSignIn": "Sign in with Microsoft",
"signedIn": "Currently accessing calendar events for {{email}}. Click the Disconnect button below to stop accessing calendar events.",
"title": "Calendar"
},
"devices": "Devices",
"followMe": "Everyone follows me",
"language": "Language",
"loggedIn": "Logged in as {{name}}",
"moderator": "Moderator",
"more": "More",
"name": "Name",
"noDevice": "None",
"selectAudioOutput": "Audio output",
"selectCamera": "Camera",
"selectMic": "Microphone",
"startAudioMuted": "Everyone starts muted",
"startVideoMuted": "Everyone starts hidden",
"title": "Settings"
},
"settingsView": {
"alertOk": "OK",
"alertTitle": "Warning",
"alertURLText": "The entered server URL is invalid",
"buildInfoSection": "Build Information",
"conferenceSection": "Conference",
"displayName": "Display name",
"email": "Email",
"header": "Settings",
"profileSection": "Profile",
"serverURL": "Server URL",
"startWithAudioMuted": "Start with audio muted",
"startWithVideoMuted": "Start with video muted",
"version": "Version"
},
"share": {
"dialInfoText": "\n\n=====\n\nJust want to dial in on your phone?\n\n{{defaultDialInNumber}}Click this link to see the dial in phone numbers for this meeting\n{{dialInfoPageUrl}}",
"mainText": "Click the following link to join the meeting:\n{{roomUrl}}"
},
"speaker": "Speaker",
"speakerStats": {
"hours": "{{count}}h",
"minutes": "{{count}}m",
"name": "Name",
"seconds": "{{count}}s",
"speakerStats": "Speaker Stats",
"speakerTime": "Speaker Time"
},
"startupoverlay": {
"policyText": " ",
"title": "{{app}} needs to use your microphone and camera."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Rejoin",
"text": "Press the <i>Rejoin</i> button to reconnect.",
"title": "Your video call was interrupted because this computer went to sleep."
},
"toolbar": {
"accessibilityLabel": {
"audioOnly": "Toggle audio only",
"audioRoute": "Select the sound device",
"callQuality": "Manage call quality",
"cc": "Toggle subtitles",
"chat": "Toggle chat window",
"document": "Toggle shared document",
"feedback": "Leave feedback",
"fullScreen": "Toggle full screen",
"hangup": "Leave the call",
"invite": "Invite people",
"kick": "Kick participant",
"localRecording": "Toggle local recording controls",
"lockRoom": "Toggle meeting password",
"moreActions": "Toggle more actions menu",
"moreActionsMenu": "More actions menu",
"mute": "Toggle mute audio",
"pip": "Toggle Picture-in-Picture mode",
"profile": "Edit your profile",
"raiseHand": "Toggle raise hand",
"recording": "Toggle recording",
"remoteMute": "Mute participant",
"Settings": "Toggle settings",
"sharedvideo": "Toggle Youtube video sharing",
"shareRoom": "Invite someone",
"shareYourScreen": "Toggle screenshare",
"shortcuts": "Toggle shortcuts",
"show": "",
"speakerStats": "Toggle speaker statistics",
"tileView": "Toggle tile view",
"toggleCamera": "Toggle camera",
"videomute": "Toggle mute video",
"videoblur": ""
},
"addPeople": "Add people to your call",
"audioOnlyOff": "Disable audio only mode",
"audioOnlyOn": "Enable audio only mode",
"audioRoute": "Select the sound device",
"authenticate": "Authenticate",
"callQuality": "Manage call quality",
"chat": "Open / Close chat",
"closeChat": "Close chat",
"documentClose": "Close shared document",
"documentOpen": "Open shared document",
"enterFullScreen": "View full screen",
"enterTileView": "Enter tile view",
"exitFullScreen": "Exit full screen",
"exitTileView": "Exit tile view",
"feedback": "Leave feedback",
"hangup": "Leave",
"invite": "Invite people",
"login": "Log in",
"logout": "Log out",
"lowerYourHand": "Lower your hand",
"moreActions": "More actions",
"mute": "Mute / Unmute",
"openChat": "Open chat",
"pip": "Enter Picture-in-Picture mode",
"profile": "Edit your profile",
"raiseHand": "Raise / Lower your hand",
"raiseYourHand": "Raise your hand",
"Settings": "Settings",
"sharedvideo": "Share a YouTube video",
"shareRoom": "Invite someone",
"shortcuts": "View shortcuts",
"speakerStats": "Speaker stats",
"startScreenSharing": "Start screen sharing",
"startSubtitles": "Start subtitles",
"stopScreenSharing": "Stop screen sharing",
"stopSubtitles": "Stop subtitles",
"stopSharedVideo": "Stop YouTube video",
"talkWhileMutedPopup": "Trying to speak? You are muted.",
"tileViewToggle": "Toggle tile view",
"toggleCamera": "Toggle camera",
"videomute": "Start / Stop camera",
"startvideoblur": "",
"stopvideoblur": ""
},
"transcribing": {
"ccButtonTooltip": "Start / Stop subtitles",
"error": "Transcribing failed. Please try again.",
"expandedLabel": "Transcribing is currently on",
"failedToStart": "Transcribing failed to start",
"labelToolTip": "The meeting is being transcribed",
"off": "Transcribing stopped",
"pending": "Preparing to transcribe the meeting...",
"start": "Start showing subtitles",
"stop": "Stop showing subtitles",
"tr": "TR"
},
"userMedia": {
"androidGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
"chromeGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
"edgeGrantPermissions": "Select <b><i>Yes</i></b> when your browser asks for permissions.",
"electronGrantPermissions": "Please grant permissions to use your camera and microphone",
"firefoxGrantPermissions": "Select <b><i>Share Selected Device</i></b> when your browser asks for permissions.",
"iexplorerGrantPermissions": "Select <b><i>OK</i></b> when your browser asks for permissions.",
"nwjsGrantPermissions": "Please grant permissions to use your camera and microphone",
"operaGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
"react-nativeGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
"safariGrantPermissions": "Select <b><i>OK</i></b> when your browser asks for permissions."
},
"videoSIPGW": {
"busy": "We're working on freeing resources. Please try again in a few minutes.",
"busyTitle": "The Room service is currently busy",
"errorAlreadyInvited": "{{displayName}} already invited",
"errorInvite": "Conference not established yet. Please try again later.",
"errorInviteFailed": "We're working on resolving the issue. Please try again later.",
"errorInviteFailedTitle": "Inviting {{displayName}} failed",
"errorInviteTitle": "Error inviting room",
"pending": "{{displayName}} has been invited"
},
"videoStatus": {
"audioOnly": "AUD",
"audioOnlyExpanded": "You are in audio only mode. This mode saves bandwidth but you won't see videos of others.",
"callQuality": "Call Quality",
"hd": "HD",
"highDefinition": "High definition",
"labelTooiltipNoVideo": "No video",
"labelTooltipAudioOnly": "Audio-only mode enabled",
"ld": "LD",
"lowDefinition": "Low definition",
"onlyAudioAvailable": "Only audio is available",
"onlyAudioSupported": "We only support audio in this browser.",
"p2pEnabled": "Peer to Peer Enabled",
"p2pVideoQualityDescription": "In peer to peer mode, received call quality can only be toggled between high and audio only. Other settings will not be honoured until peer to peer is exited.",
"recHighDefinitionOnly": "Will prefer high definition.",
"sd": "SD",
"standardDefinition": "Standard definition"
},
"videothumbnail": {
"domute": "Mute",
"flip": "Flip",
"kick": "Kick out",
"moderator": "Moderator",
"mute": "Member is muted",
"muted": "Muted",
"remoteControl": "Remote control",
"show": "",
"videomute": "Member has stopped the camera"
},
"welcomepage": {
"accessibilityLabel": {
"join": "Tap to join",
"roomname": "Enter room name"
},
"appDescription": "Go ahead, video chat with the whole team. In fact, invite everyone you know. {{app}} is a fully encrypted, 100% open source video conferencing solution that you can use all day, every day, for free — with no account needed.",
"audioVideoSwitch": {
"audio": "Voice",
"video": "Video"
},
"calendar": "Calendar",
"connectCalendarButton": "Connect your calendar",
"connectCalendarText": "",
"enterRoomTitle": "Start a new meeting",
"go": "GO",
"join": "JOIN",
"info": "Info",
"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": "",
"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",
"terms": "Terms",
"title": "Secure, fully featured, and completely free video conferencing"
}
}

File diff suppressed because it is too large Load Diff

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