Compare commits

...

79 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé
17cb867078 feat(build) use Node 24, the current LTS 2026-03-02 20:15:07 +01:00
Saúl Ibarra Corretgé
b2ad0995ae feat(recording) remove recording limit functionality
It was designed for the 8x8 standalone apps which have been sunset for a
while.
2026-03-02 20:14:03 +01:00
dependabot[bot]
b61b72087b chore(deps): bump lodash-es from 4.17.21 to 4.17.23
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.17.23
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 18:04:09 +01:00
dependabot[bot]
157be6b660 chore(ci): bump actions/setup-node from 6.1.0 to 6.2.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](395ad32622...6044e13b5d)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 16:10:01 +01:00
dependabot[bot]
be6aba9aec chore(deps-dev): bump webpack-dev-server from 5.1.0 to 5.2.1
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 5.1.0 to 5.2.1.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v5.1.0...v5.2.1)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-version: 5.2.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 15:40:36 +01:00
vishal2005025
d4bbaaba83 fix(livestream): add YouTube “Go Live” reminder in Start Live Stream dialog 2026-03-02 15:09:26 +01:00
dependabot[bot]
e4f22df5f2 chore(deps): bump on-headers and compression
Bumps [on-headers](https://github.com/jshttp/on-headers) and [compression](https://github.com/expressjs/compression). These dependencies needed to be updated together.

Updates `on-headers` from 1.0.2 to 1.1.0
- [Release notes](https://github.com/jshttp/on-headers/releases)
- [Changelog](https://github.com/jshttp/on-headers/blob/master/HISTORY.md)
- [Commits](https://github.com/jshttp/on-headers/compare/v1.0.2...v1.1.0)

Updates `compression` from 1.7.4 to 1.8.1
- [Release notes](https://github.com/expressjs/compression/releases)
- [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/compression/compare/1.7.4...v1.8.1)

---
updated-dependencies:
- dependency-name: on-headers
  dependency-version: 1.1.0
  dependency-type: indirect
- dependency-name: compression
  dependency-version: 1.8.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:58:04 +01:00
Calinteodor
b6d89b0939 feat(modal): fixes around JitsiScreen footer (#17041)
*Add extra px for Jitsi screen footer when native keyboard is visible.
2026-03-02 15:54:41 +02:00
dependabot[bot]
a6d3000d45 chore(ci): bump actions/checkout from 6.0.1 to 6.0.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8e8c483db8...de0fac2e45)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:54:15 +01:00
dependabot[bot]
c616d98667 chore(deps): bump faraday from 1.10.4 to 1.10.5
Bumps [faraday](https://github.com/lostisland/faraday) from 1.10.4 to 1.10.5.
- [Release notes](https://github.com/lostisland/faraday/releases)
- [Changelog](https://github.com/lostisland/faraday/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lostisland/faraday/compare/v1.10.4...v1.10.5)

---
updated-dependencies:
- dependency-name: faraday
  dependency-version: 1.10.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:53:45 +01:00
Saúl Ibarra Corretgé
900a2da909 fix(i18n) make translateToHTML more resilient 2026-03-02 14:46:49 +01:00
dependabot[bot]
cb7cde2c9a chore(deps): bump ajv from 6.12.6 to 6.14.0
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.6 to 6.14.0.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0)

---
updated-dependencies:
- dependency-name: ajv
  dependency-version: 6.14.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:44:23 +01:00
dependabot[bot]
32b29b963e chore(ci): bump actions/stale from 10.1.0 to 10.2.0
Bumps [actions/stale](https://github.com/actions/stale) from 10.1.0 to 10.2.0.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](5f858e3efb...b5d41d4e1d)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: 10.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:43:31 +01:00
dependabot[bot]
ad7658d58b chore(deps): bump minimatch
Bumps  and [minimatch](https://github.com/isaacs/minimatch). These dependencies needed to be updated together.

Updates `minimatch` from 3.1.2 to 3.1.4
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.4)

Updates `minimatch` from 10.0.3 to 10.2.3
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.4)

Updates `minimatch` from 9.0.5 to 9.0.7
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.4)

Updates `minimatch` from 5.1.6 to 5.1.8
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.4)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 3.1.4
  dependency-type: indirect
- dependency-name: minimatch
  dependency-version: 10.2.3
  dependency-type: indirect
- dependency-name: minimatch
  dependency-version: 9.0.7
  dependency-type: indirect
- dependency-name: minimatch
  dependency-version: 5.1.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:42:19 +01:00
dependabot[bot]
6a24b10fa9 chore(deps-dev): bump basic-ftp from 5.1.0 to 5.2.0
Bumps [basic-ftp](https://github.com/patrickjuchli/basic-ftp) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/patrickjuchli/basic-ftp/releases)
- [Changelog](https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patrickjuchli/basic-ftp/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: basic-ftp
  dependency-version: 5.2.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:26:51 +01:00
damencho
38504d51cd fix(permissions): Make sure permissions are handled on mobile.
Fixes #17029.
2026-02-27 14:55:39 -06:00
damencho
ba38970e0b chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v2131.0.0+6912eed8...v2132.0.0+92c8c183
2026-02-27 14:55:31 -06:00
damencho
ac48d1def2 fix(visitor): Checks for auth expired before redirecting to avoid jwt errors. 2026-02-27 13:03:20 -06:00
damencho
d0ab6557c1 fix(authentication): Trigger connect if no connection is available for reconnect. 2026-02-27 13:03:20 -06:00
Nitin Kumar
808f4cad7a refactor(chat): adds explicit return types to selector and utility functions (#16944) 2026-02-27 12:32:37 -05:00
damencho
737448c19b fix(toolbar): Fixes build, missing props. 2026-02-26 20:20:04 -06:00
Rajvardhan Singh Rathore
cff9b3b157 fix: added missing aria-labels to toolbar buttons for accessibility 2026-02-26 17:53:48 -06:00
srijan
c3079cc156 feat(visitors-doc): use native template units for prosody visitor instances (#16656)
* feat(systemd): use native template units for prosody visitor instances

* fix: use /usr/lib path and wildcard restart for systemd units

* fix(systemd): use native template units

* squash: Drop loop and use one command to restart all.

---------

Co-authored-by: damencho <damencho@jitsi.org>
2026-02-26 17:44:21 -06:00
Christoph Settgast
2d809dd995 lang: update German translation 2026-02-26 16:31:39 -06:00
damencho
8f81a458fd fix(recording): Fix missing translation string.
Was deleted by mistake with e9848f6.
2026-02-26 14:08:33 -06:00
damencho
dbf756eaad feat(prosody): Drops moderator_id in favor of moderators list. 2026-02-26 12:15:54 -06:00
damencho
a6422882dd fix(authentication): Drops not needed tokenAuthUrlAutoRedirect. 2026-02-25 16:42:54 -06:00
mishraditi
e9848f6438 fix(recording): show advanced options in several corner cases
* fix(recording): show advanced options for local recording with transcription

* Fixed edge case when all recording service are disabled

* Modified css

* Added warning message

* Show transcription option when no recording service is present

* Addressed PR reviews

* squash: Hide recording advanced option when not rendering recording.

* squash: Show recording button when only transcriptions are enabled.

* squash: Make sure we do not call record when it is not rendered due to no permissions.

* squash: Allows those with just feature transcription to use async transcribe.

* squash: Show recording stop button when recording is running when only transcriptions feature is available.

---------

Co-authored-by: damencho <damencho@jitsi.org>
2026-02-25 16:42:41 -06:00
yash1927
5c7f7d5d1e refactor(webhid-manager): use COMMANDS.OFF_HOLD constant instead of hardcoded string 2026-02-25 16:41:33 -06:00
damencho
9d6c38590c fix(chat): Clear all state when changing room.
Some state may be left when switching to breakout room.
2026-02-25 14:05:57 -06:00
damencho
42c2398345 fix(transcriptions): Fixes showing premium options dialog from chat panel.
This is jaas related.
2026-02-25 14:05:47 -06:00
damencho
124c2137e9 fix(metadata): Always check the features on modifications. 2026-02-25 14:05:35 -06:00
damencho
bcc1a3ec72 fix(breakout): Hides unsupported services in breakout rooms. 2026-02-25 14:05:24 -06:00
Besnik Bleta
3b1f9ce659 lang: Update Albanian translation
* Adding sq translation

* Adding sq to languages.json

* Updating sq translation

* Fixing missing commas and updating string changes

* Fixing unclosed quotes

* Updating sq translation

* Updating sq translation

* Typo fixing; removing and adding commas to make the .json file valid

* Another comma missing fix

* Sorting entries aphabetically

* More sorting…

* More entry sorting

* Adding a missing space

* Adding spaces

* Get rid of an extra period

* Update for sq locale

* Update main-sq.json

* Update main-sq.json

* Update main-sq.json

* Update main-sq.json

* Update main-sq.json

* Update for sq translation

* Adding missing separator

* Adding another missing separator

* Adding another separator

* Not tired of adding separators…

* Typo fixing

* Changing place for a string; translating a forgoten string

* Updating sq translation

* Deleting an extra space at the beggining of a string

* Update for sq translation

* Update for sq translation

* Update main-sq.json

* Update main-sq.json

* Update for sq translation

* Fixing a couple of missing commas

* Fixing commas to validate main-sq.json

* Fixing string order and extra spaces

* More string order fixing
2026-02-25 14:05:13 -06:00
Stephan Paternotte
d478db1b99 lang: Update Dutch translations 2026-02-25 11:59:56 -06:00
Nishant kumar
c3c42b477b feat(transcription): allow custom transcriber languages via config (#16984)
* feat(transcription): allow custom transcriber languages via config

* fix(transcription): avoid duplicating default language json and document config

* feat(config): add support for custom transcription languages in configuration

* fix(config): satisfy lint and ts rules
2026-02-25 10:34:47 -06:00
yash1927
35539c0772 fix(local-recording): close AudioContext on recording stop
fix(local-recording): close AudioContext on recording stop
2026-02-25 08:08:04 -06:00
coder-tejas
4c4ea3d93d docs(external-api) fix typo 'comatability' -> 'compatibility' 2026-02-24 21:35:07 -06:00
Bandhan Majumder
e1296fd82f fix(toolbox): enabledInJwt check for isDesktopShareButtonDisabled in native (#16997) 2026-02-24 11:36:13 -06:00
Calinteodor
5c92faccf6 feat(filmstrip): move AudioTracksContainer outside (#17000)
* Move AudioTracksContainer outside of filmstrip feature.
2026-02-24 16:55:09 +02:00
damencho
c00b1c8145 fix(authentication): Skip prejoin in some case when not inline. 2026-02-24 07:40:41 -06:00
bgrozev
dfd75ddc08 test: Clean-up transcription test. (#16991)
* test: Clean-up transcription test.

Possibly fix race conditions

* fix: Wait until jigasi leaves.

* squash: Linting.

* squash: Fix participant count check.

* squash: Switch to iframe.

* squash: Linting.
2026-02-23 19:12:25 -06:00
Stephan Paternotte
0aad7f7b36 lang: Update Dutch translations 2026-02-23 19:12:02 -06:00
damencho
d602fe48e5 fix(tests): Adds a retry to iframe kick test. 2026-02-23 18:14:28 -06:00
damencho
c5c7983675 fix(authentication): Fixes loading jwt middleware.
In 96d02e8 a middleware.web was introduced which broke loading the original one.
2026-02-23 18:14:28 -06:00
Jaya Allamsetty
a461e867d5 fix(video-layout) Fixes auto-pinning of SS in large calls. (#16992)
* fix(video-layout) Fixes auto-pinning of SS in large calls.
In calls with 50+ participants, isTopPanelEnabled returns true. This causes isStageFilmstripAvailable(state) (called with no minimum participant count from getPinnedParticipant) to return true even when activeParticipants is empty. When getPinnedParticipant takes that stage filmstrip path, it reads from activeParticipants.find(p => p.pinned) — which is always
  empty for an auto-pinned screenshare.
Added an explicit check in shouldDisplayTileView's auto-mode logic: when there are active screenshares AND the top panel is enabled AND auto-pin is active AND Follow Me isn't controlling the layout, exit tile view. The guards on getAutoPinSetting() and !isFollowMeActive(state) mirror the same conditions checked everywhere else before auto-pinning fires, ensuring
  consistent behavior.

* squash: Fixes linter error
2026-02-23 17:31:12 -05:00
Дамян Минков
96d02e8484 feat(authentication): Inline authentication for web
* fix(meeting_id): Depends on jitsi_session(uses session.user_region).

* feat(authentication): A static page that can be used with some auth providers like keycloak.

* fix(authentication): Implements inline authentication.

squash: Adds refresh token use when refresh token is needed on connection resuming.
squash: Fix bugs and move to PKCE flow.

* squash: Adds nonce verification.

* squash: Drops the closing logic.

* squash: Replace resuming event with CONNECTION_TOKEN_EXPIRED one.

* squash: Fixes comments.

* squash: Make sure we use tokenAuthUrl only when it is set and is not jaas.

* squash: Move CONNECTION_TOKEN_EXPIRED to web only middleware as it uses web only logic for now.

* squash: Fix comments.
2026-02-23 13:12:37 -06:00
damencho
c48834a116 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v2124.0.0+80df84a1...v2131.0.0+6912eed8
2026-02-23 13:05:42 -06:00
solomon17705cs
244b5f9dd3 Fix: correct label binding in Advanced Options switches
Update the label's htmlFor and the Switch id from 'recording-switch-transcription' to 'recording-switch-audio-video' in StartRecordingDialogContent. This corrects the label-to-control association for the audio/video recording toggle, fixing an accessibility/mapping mismatch.
2026-02-23 13:05:26 -06:00
mishraditi
18504d4ad8 lang: update Hindi translations
* lang: update Hindi translation

* fix-lint
2026-02-23 11:03:07 -06:00
erfan teymuri
fcf8a4bbe0 lang: Update Persian (fa) translations
* i18n: update Persian (fa) translations

* fixed wrong new line at the end of file

* i18n: fix Persian (fa) translation for participants list heading

* fix: add missing newline at the end of main-fa.json
2026-02-23 11:02:49 -06:00
damencho
f66fe9fbbd feat(tests): Enables sipjibri tests. 2026-02-23 09:34:18 -06:00
Stephan Paternotte
caee687cc3 lang: Update Dutch translations
Fixed Salesforce back to its original name.
2026-02-23 07:44:31 -06:00
damencho
8530c1f2fc fix(debian): Fixes initial install and certs in trust store.
After the trust store is updated, restart components.
2026-02-21 15:12:03 -06:00
Oleksii Chornomorchenko
3b2e3526c4 lang: Update Finnish translations (#16947) 2026-02-20 19:37:38 -06:00
bgrozev
aee5cb9200 test: Fix transcription test. (#16974)
Fix waiting for transcription to be turned off. Re-enabling transcription was sometimes started before jigasi had left the room, resulting in a failure.
2026-02-20 18:11:53 -06:00
mishraditi
df0e55eda3 fix(settings): avoid activating all microphones when audio levels are disabled 2026-02-20 13:40:40 -06:00
Calinteodor
f7d64341f8 feat(lobby): Updates around toolbox menu and state (#16965)
* Remove hang up button from prejoin/lobby toolbox and reset lobby visibility state when access denied.
2026-02-20 11:13:42 +02:00
Jaya Allamsetty
156dd24b14 fix(filmstrip) Fixes an issue with ghost tiles appearing on the filmstrip.
This was a regression of the recent changes to filmstrip reordering.
2026-02-19 17:43:22 -05:00
Calinteodor
91481aa245 fix(lobby): use conferenceLeft instead of conferenceWilLeave
*Hang-up button is calling both appNavigate and conferenceWillLeave synchronously and something is interfering.
appNavigate is async and something is calling it again before conferenceWillLeave completes.
2026-02-19 13:59:54 +02:00
Boris Grozev
e94153df16 test: Enable retries for the kick test, it's failing sporadically. 2026-02-18 17:38:06 -06:00
Mihaela Dumitru
3c85aa2350 fix(ui): add semantic tokens for svg fills and preview (#16962) 2026-02-18 20:11:04 +02:00
Calin-Teodor
c9a220e1c3 fix(android/sdk): prevent inflated inset values for top and bottom 2026-02-18 12:31:04 +02:00
Mihaela Dumitru
5f11e2e9f4 fix(ui): more semantic tokens (#16955) 2026-02-18 10:43:39 +02:00
Calin-Teodor
45ee515b6b fix(base/ui): update welcome page navigation colors 2026-02-16 16:42:11 +02:00
root
56f7792604 fix: insecure-document-method-36 2026-02-13 13:16:22 +01:00
Mihaela Dumitru
230559c493 fix(ui): hide input placeholder on focus (#16932) 2026-02-12 12:00:46 +02:00
Stephan Paternotte
900bece988 lang: Update Dutch translations (#16931)
feat(file-sharing): Adds tooltip to upload button.
2026-02-11 19:52:37 -06:00
RidaElmaaroufi
a06a338de5 fix: enable local recording when embedded in a same-domain iframe (#16900) 2026-02-11 12:08:35 +01:00
Christoph Settgast
eb1e4f01e7 lang: update German translation 2026-02-10 15:23:33 -06:00
bgrozev
641a401b4b fix(tests): Add expectations for async transcriptions. (#16925) 2026-02-10 11:07:15 -06:00
Дамян Минков
6e3c256905 feat(file-sharing): Adds tooltip to upload button. (#16924)
* feat(file-sharing): Adds tooltip to upload button.

* squash: Change message.
2026-02-10 09:24:19 -06:00
damencho
36a755776e feat(invite): Respects dial-in field from metadata. 2026-02-10 08:42:37 -06:00
Damien Fetis
7bd38be8a4 lang: Update French labels (#16922) 2026-02-10 08:42:29 -06:00
Jaya Allamsetty
c88bfa1b9a fix(filmstrip) Excludes partially visible tiles for dominant speaker slot. 2026-02-09 17:59:27 -05:00
bgrozev
6a443b0f8f fix: Do not access "room" if undefined, improve logs. (#16917) 2026-02-09 15:52:47 -06:00
Mihaela Dumitru
b4cc466608 feat(files): add external api events for upload/delete (#16908) 2026-02-09 14:10:42 +02:00
Jaya Allamsetty
bde8dca825 fix(filmstrip) Ensures dominant speaker is always visible in filmstrip (#16901)
* fix(filmstrip) Ensures dominant speaker is always visible in filmstrip
2026-02-06 14:29:32 -05:00
Hristo Terezov
2ab86cffb8 feat(draggable-panels): Enable touch-screen support
Adds touch-screen support for resizing filmstrip and chat panels to enable tablet and touch-laptop users to adjust panel widths. Previously, drag handles only worked with mouse hover, making panels non-resizable on touch devices.

Changes:
- Implement Pointer Events API for unified mouse/touch handling
- Add touch device detection with screen size threshold
- Make drag handles always visible on touch devices with padding for easier tapping
- Maintain identical visual layout between touch and non-touch versions

Touch devices with sufficiently large screens now have fully functional drag handles with appropriate hit targets while smaller devices remain disabled to preserve mobile UX.
2026-02-06 09:48:44 -06:00
196 changed files with 5522 additions and 2183 deletions

View File

@@ -7,7 +7,7 @@ jobs:
name: Luacheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- name: Install luarocks
run: sudo apt-get --install-recommends -y install luarocks

View File

@@ -7,8 +7,8 @@ jobs:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 #v6.2.0
with:
node-version-file: '.nvmrc'
cache: 'npm'
@@ -42,8 +42,8 @@ jobs:
matrix:
os: [macos-latest, ubuntu-latest]
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 #v6.2.0
with:
node-version-file: '.nvmrc'
cache: 'npm'
@@ -59,8 +59,8 @@ jobs:
name: Build mobile bundle (Android)
runs-on: macos-15
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 #v6.2.0
with:
node-version-file: '.nvmrc'
cache: 'npm'
@@ -74,8 +74,8 @@ jobs:
name: Build mobile bundle (iOS)
runs-on: macos-15
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 #v6.2.0
with:
node-version-file: '.nvmrc'
cache: 'npm'
@@ -116,8 +116,8 @@ jobs:
rm -rf /host/usr/share/dotnet
rm -rf /host/usr/share/swift
df -h /
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 #v6.2.0
with:
node-version-file: '.nvmrc'
cache: 'npm'
@@ -137,8 +137,8 @@ jobs:
name: Build mobile SDK (iOS)
runs-on: macos-15
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 #v6.2.0
with:
node-version-file: '.nvmrc'
cache: 'npm'
@@ -187,8 +187,8 @@ jobs:
name: Test Debian packages build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 #v6.2.0
with:
node-version-file: '.nvmrc'
cache: 'npm'

View File

@@ -7,7 +7,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 #v10.1.0
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f #v10.2.0
with:
stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'

2
.nvmrc
View File

@@ -1 +1 @@
22
24

View File

@@ -102,7 +102,7 @@ GEM
ethon (0.16.0)
ffi (>= 1.15.0)
excon (0.112.0)
faraday (1.10.4)
faraday (1.10.5)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -118,10 +118,10 @@ GEM
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-em_synchrony (1.0.1)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.1.0)
faraday-multipart (1.2.0)
multipart-post (~> 2.0)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)

View File

@@ -96,23 +96,53 @@ public class JitsiMeetActivity extends AppCompatActivity
public static void addTopBottomInsets(@NonNull Window w, @NonNull View v) {
// Enable edge-to-edge mode
androidx.core.view.WindowCompat.setDecorFitsSystemWindows(w, false);
// Make system bars transparent so content is visible underneath
w.setStatusBarColor(android.graphics.Color.TRANSPARENT);
w.setNavigationBarColor(android.graphics.Color.TRANSPARENT);
View decorView = w.getDecorView();
decorView.post(() -> {
WindowInsetsCompat insets = ViewCompat.getRootWindowInsets(decorView);
if (insets != null) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
params.topMargin = insets.getInsets(WindowInsetsCompat.Type.systemBars()).top;
params.bottomMargin = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom;
// Get display metrics for calculating density-independent caps
final android.util.DisplayMetrics metrics = v.getContext().getResources().getDisplayMetrics();
final int screenHeight = metrics.heightPixels;
final float density = metrics.density;
// Listen for window inset changes
// when system bars visibility is toggled or when the device rotates
ViewCompat.setOnApplyWindowInsetsListener(decorView, (view, windowInsets) -> {
// Get the actual inset values reported by the system
int statusBarInset = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars()).top;
int navBarInset = windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom;
// Calculate maximum allowed inset values to prevent device-specific bugs
final int maxTopInset = Math.min((int)(60 * density), (int)(screenHeight * 0.10));
final int maxBottomInset = Math.min((int)(120 * density), (int)(screenHeight * 0.10));
int topInset = Math.min(statusBarInset, maxTopInset);
int bottomInset = Math.min(navBarInset, maxBottomInset);
// Apply calculated insets
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
// Update margins only if they've changed
if (params.topMargin != topInset || params.bottomMargin != bottomInset) {
params.topMargin = topInset;
params.bottomMargin = bottomInset;
v.setLayoutParams(params);
decorView.setOnApplyWindowInsetsListener((view, windowInsets) -> {
view.setBackgroundColor(JitsiMeetView.BACKGROUND_COLOR);
return windowInsets;
});
}
view.setBackgroundColor(JitsiMeetView.BACKGROUND_COLOR);
// Return CONSUMED to prevent double-application of margins
return WindowInsetsCompat.CONSUMED;
});
// Manually trigger the inset listener to apply margins immediately
ViewCompat.requestApplyInsets(decorView);
}
// Overrides
@@ -136,10 +166,11 @@ public class JitsiMeetActivity extends AppCompatActivity
setContentView(R.layout.activity_jitsi_meet);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM
&& getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
addTopBottomInsets(getWindow(), findViewById(android.R.id.content));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM
&& getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
addTopBottomInsets(getWindow(), findViewById(android.R.id.content));
}
this.jitsiView = findViewById(R.id.jitsiView);

View File

@@ -1720,15 +1720,7 @@ export default {
}
);
room.on(JitsiConferenceEvents.PERMISSIONS_RECEIVED, p => {
const localParticipant = getLocalParticipant(APP.store.getState());
APP.store.dispatch(participantUpdated({
id: localParticipant.id,
local: true,
features: p
}));
});
},
/**

View File

@@ -511,6 +511,15 @@ var config = {
// // ./src/react/features/transcribing/transcriber-langs.json.
// preferredLanguage: 'en-US',
// Allows extending the list of supported transcription languages.
// Useful for custom transcription backends (e.g. Vosk).
//
// Example:
// customLanguages: {
// 'hsb-DE': 'Upper Sorbian (Germany)',
// 'dsb-DE': 'Lower Sorbian (Germany)'
// },
// // Enables automatic turning on transcribing when recording is started
// autoTranscribeOnRecord: false,
@@ -637,21 +646,6 @@ var config = {
// sticky: 0,
// },
// // Options for the recording limit notification.
// recordingLimit: {
//
// // The recording limit in minutes. Note: This number appears in the notification text
// // but doesn't enforce the actual recording time limit. This should be configured in
// // jibri!
// limit: 60,
//
// // The name of the app with unlimited recordings.
// appName: 'Unlimited recordings APP',
//
// // The URL of the app with unlimited recordings.
// appURL: 'https://unlimited.recordings.app.com/',
// },
// Disables or enables RTX (RFC 4588) (defaults to false).
// disableRtx: false,
@@ -1592,14 +1586,13 @@ var config = {
// - electron=true (when web is loaded in electron app)
// If there is a logout service you can specify its URL with:
// tokenLogoutUrl: 'https://myservice.com/logout'
// You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before
// and will automatically redirect to the token service to get the token for the meeting.
// tokenAuthUrlAutoRedirect: false
// An option to respect the context.tenant jwt field compared to the current tenant from the url
// tokenRespectTenant: false,
// An option to get for user info (name, picture, email) in the token outside the user context.
// Can be used with Firebase tokens.
// tokenGetUserInfoOutOfContext: false,
// An option to pass the token in the iframe API directly instead of using the redirect flow.
// tokenAuthInline: false,
// You can put an array of values to target different entity types in the invite dialog.
// Valid values are "phone", "room", "sip", "user", "videosipgw" and "email"

View File

@@ -45,7 +45,7 @@ body {
.jitsi-icon {
&-default svg {
fill: var(--icon-default-color, white);
fill: var(--icon-svg-fill, white);
}
}

View File

@@ -2,8 +2,8 @@
.reactions-menu {
width: 330px;
background: #242528;
box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25);
background: var(--reactions-menu-background, #242528);
box-shadow: 0px 3px 16px var(--reactions-menu-box-shadow-1, rgba(0, 0, 0, 0.6)), 0px 0px 4px 1px var(--reactions-menu-box-shadow-2, rgba(0, 0, 0, 0.25));
border-radius: 6px;
padding: 16px;
@@ -14,7 +14,7 @@
top: 3px;
& .toolbox-icon.toggled {
background-color: #000000;
background-color: var(--reactions-menu-button-toggled, #000000);
}
}
}

View File

@@ -196,4 +196,14 @@
color:#FFD740;
font-size: 0.75rem;
}
.youtube-go-live-warning {
margin-bottom: 16px;
padding: 8px 12px;
background-color: rgba(248, 174, 26, 0.1);
border-left: 3px solid #FFD740;
font-size: 0.875rem;
line-height: 1.25rem;
color: #FFD740;
}
}

View File

@@ -106,7 +106,7 @@
}
#preview {
background: #040404;
background: var(--prejoin-preview-background, #040404);
display: flex;
align-items: center;
justify-content: center;

2
debian/control vendored
View File

@@ -34,7 +34,7 @@ Description: Configuration for web serving of Jitsi Meet
Package: jitsi-meet-prosody
Architecture: all
Depends: openssl, prosody (>= 0.12.0) | prosody-trunk | prosody-0.12 | prosody-13.0, lua-sec, lua-basexx, lua-luaossl, lua-cjson, lua-inspect
Depends: openssl, prosody (>= 0.12.0) | prosody-trunk | prosody-0.12 | prosody-13.0, ca-certificates-java, lua-sec, lua-basexx, lua-luaossl, lua-cjson, lua-inspect
Replaces: jitsi-meet-tokens
Description: Prosody configuration for Jitsi Meet
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi

View File

@@ -284,13 +284,17 @@ case "$1" in
# and drop the wait and the prosody restart
sleep 1
invoke-rc.d prosody restart || true
# In case we had updated the certificates and restarted prosody, let's restart and the bridge and jicofo if possible
if [ -d /run/systemd/system ] && [ "$CERT_ADDED_TO_TRUST" = "true" ]; then
fi
;;
triggered)
for trigger in $2; do
if [ "$trigger" = "update-ca-certificates-java" ]; then
echo "Java certificates updated, restarting Jitsi components..."
systemctl restart jitsi-videobridge2.service >/dev/null || true
systemctl restart jicofo.service >/dev/null || true
fi
fi
done
exit 0
;;
abort-upgrade|abort-remove|abort-deconfigure)

1
debian/jitsi-meet-prosody.triggers vendored Normal file
View File

@@ -0,0 +1 @@
interest-noawait update-ca-certificates-java

View File

@@ -537,8 +537,6 @@
"googlePrivacyPolicy": "سياسية خصوصية غوغل",
"inProgress": "البث المباشر غير ممكّن على {{email}}. يرجى تمكين البث المباشر أو تسجيل الدخول إلى حساب مع تمكين البث المباشر.",
"invalidStreamKey": "يحتمل كون مفتاح البث الحي غير صحيح.",
"limitNotificationDescriptionNative": "سيقيَّد البث إلى {{limit}} د، ولكن إن أردت إجراء عملية بث غير محدودة، جرِّب {{app}}.",
"limitNotificationDescriptionWeb": "نظرًا للضغط الكبير، سيقيَّد البث إلى {{limit}} د، ولكن إن أردت إجراء عملية بث غير محدودة، جرِّب <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "أُوقِف البث الحي",
"offBy": "أوقف {{name}} البث الحي",
"on": "بث حي",
@@ -898,8 +896,6 @@
"highlightMomentSuccess": "تم تمييز اللحظة",
"highlightMomentSucessDescription": "ستتم إضافة اللحظة المميزة إلى ملخص المُلتقى.",
"inProgress": "التسجيل أو البث المباشر قيد التقدم",
"limitNotificationDescriptionNative": "نظرًا للضغط الكبير، سيقيَّد التسجيل إلى {{limit}} د، ولكن إن أردت التسجيل لمدة مفتوحة، جرِّب <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "نظرًا للضغط الكبير، سيقيَّد التسجيل إلى {{limit}} د، ولكن إن أردت التسجيل لمدة مفتوحة، جرِّب <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "لقد أنشأنا رابطًا لتسجيلك.",
"live": "مباشر",
"localRecordingNoNotificationWarning": "لن يتم الإعلان عن التسجيل للمشاركين الآخرين. ستحتاج إلى إخبارهم بأنه تم تسجيل الاجتماع.",

View File

@@ -359,7 +359,7 @@
"kickParticipantTitle": "Изгонване на този участник?",
"kickSystemTitle": "Ауч! Бяхте изгонени от срещата",
"kickTitle": "Ауч! {{participantDisplayName}} Ви изгони от тази среща",
"learnMore": "научи повече",
"learnMore": "Научи повече",
"linkMeeting": "Свързване на среща",
"linkMeetingTitle": "Свързване на среща със Salesforce",
"liveStreaming": "Излъчване на живо",
@@ -429,9 +429,7 @@
"recentlyUsedObjects": "Вашите наскоро използвани обекти",
"recording": "Запис",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Невъзможно докато е активно излъчване на живо",
"recordingInProgressDescription": "Тази среща се записва и анализира от AI{{learnMore}}. Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.",
"recordingInProgressDescriptionFirstHalf": "Тази среща се записва и анализира от AI",
"recordingInProgressDescriptionSecondHalf": ". Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.",
"recordingInProgressDescription": "Тази среща се записва и анализира от AI. Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.",
"recordingInProgressTitle": "В момента се записва",
"rejoinNow": "Повторно присъединяване сега",
"remoteControlAllowedMessage": "{{user}} прие заявката Ви за отдалечено управление!",
@@ -692,8 +690,6 @@
"googlePrivacyPolicy": "Политика за поверителност на Google",
"inProgress": "В ход е запис или излъчване на живо",
"invalidStreamKey": "Ключът за предаване на живо е грешен.",
"limitNotificationDescriptionNative": "Излъчването ви ще бъде ограничено до {{limit}} мин. За неограничено излъчване опитайте {{app}}.",
"limitNotificationDescriptionWeb": "Поради голямото търсене, излъчването ви ще бъде ограничено до {{limit}} мин. За неограничено излъчване опитайте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Край на излъчването на живо",
"offBy": "{{name}} спря излъчването на живо",
"on": "Излъчване на живо",
@@ -1111,8 +1107,6 @@
"highlightMomentSuccess": "Моментът е отбелязан",
"highlightMomentSucessDescription": "Отбелязаният момент ще бъде добавен към резюмето на срещата.",
"inProgress": "В ход е запис или излъчване на живо",
"limitNotificationDescriptionNative": "Поради голямото търсене записът ви ще бъде ограничен до {{limit}} мин. За неограничени записи опитайте <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Поради голямото търсене записът ви ще бъде ограничен до {{limit}} мин. За неограничени записи опитайте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Генерирахме линк към вашия запис.",
"localRecordingNoNotificationWarning": "Записът няма да бъде обявен на другите участници. Ще трябва да ги уведомите, че срещата се записва.",
"localRecordingNoVideo": "Видеото не се записва",

View File

@@ -541,8 +541,6 @@
"googlePrivacyPolicy": "Polítiques de privadesa de Google",
"inProgress": "L'enregistrament o la transmissió en directe és en progrés",
"invalidStreamKey": "La clau de transmissió en directe pot ser incorrecta.",
"limitNotificationDescriptionNative": "L'emissió es limitarà a {{limit}} min. Per a emissions sense límit proveu {{app}}.",
"limitNotificationDescriptionWeb": "Atesa l'alta demanda, la vostra emissió es limitarà a {{limit}} minuts. Per a emissions il·limitades, proveu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>",
"off": "S'ha aturat la transmissió en directe",
"offBy": "{{name}} ha aturat la transmissió en directe",
"on": "Ha començat la transmissió en directe",
@@ -905,8 +903,6 @@
"highlightMomentSuccess": "Moment destacat",
"highlightMomentSucessDescription": "S'ha afegit el moment destacat al resum de la reunió.",
"inProgress": "L'enregistrament o la transmissió en directe és en progrés",
"limitNotificationDescriptionNative": "A causa de la gran demanda, el vostre enregistrament es limitarà a {{limit}} min. Per a enregistraments il·limitats, proveu <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "A causa de la gran demanda, l'enregistrament es limitarà a {{limit}} min. Per a enregistraments il·limitats, proveu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "S'ha generat un enllaç a l'enregistrament.",
"live": "EN DIRECTE",
"localRecordingNoNotificationWarning": "L'enregistrament no s'anunciarà als altres participants. Els haureu d'informar que la reunió s'està enregistrant.",

View File

@@ -635,8 +635,6 @@
"googlePrivacyPolicy": "Zásady soukromí Google",
"inProgress": "Probíhá nahrávání nebo živé visílání",
"invalidStreamKey": "Klíč k živému přenosu může být chybný.",
"limitNotificationDescriptionNative": "Váš živý přenos může trvat nejvýše {{limit}} min. Pro neomezený přenos vyzkoušejte {{app}}.",
"limitNotificationDescriptionWeb": "Kvůli vysokému zájmu může váš přenos trvat nejvýše {{limit}} min. Pro neomezený přenos vyzkoušejte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Živý přenos skončil",
"offBy": "{{name}} zastavil/a živý přenos",
"on": "Živý přenos",
@@ -1037,8 +1035,6 @@
"highlightMomentSuccess": "Zvýrazněný okamžik",
"highlightMomentSucessDescription": "Váš zvýrazněný okamžik bude přidán do shrnutí setkání.",
"inProgress": "Probíhá nahrávání nebo živé vysílání",
"limitNotificationDescriptionNative": "Kvůli vysokému zájmu bude vaše nahrávka omezena na nejvýše {{limit}} min. Pro neomezené nahrávání zkuste <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Kvůli vysokému zájmu bude vaše nahrávka omezena na nejvýše {{limit}} min. Pro neomezené nahrávání zkuste <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Vygenerovali jsme odkaz na vaši nahrávku.",
"localRecordingNoNotificationWarning": "Nahrávka nebude oznámena ostatním účastníkům. Budete jim muset dát vědět, že schůzka je nahrána.",
"localRecordingNoVideo": "Video se nenahrává",

View File

@@ -440,9 +440,7 @@
"recentlyUsedObjects": "Dine nyligt anvendte objekter",
"recording": "Optagelse",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Ikke mulig, mens en livestream er igang",
"recordingInProgressDescription": "Dette møde bliver optaget og bearbejdet af AI{{learnMore}}. Din video og lyd er blevet deaktiveret. Hvis du vælger at unmute din video og lyd, giver du samtykke til at blive optaget.",
"recordingInProgressDescriptionFirstHalf": "Dette møde bliver optaget og bearbejdet af AI",
"recordingInProgressDescriptionSecondHalf": ". Din video og lyd er blevet deaktiveret. Hvis du vælger at unmute din video og lyd, giver du samtykke til at blive optaget.",
"recordingInProgressDescription": "Dette møde bliver optaget og bearbejdet af AI. Din video og lyd er blevet deaktiveret. Hvis du vælger at unmute din video og lyd, giver du samtykke til at blive optaget.",
"recordingInProgressTitle": "Optagelse er igang",
"rejoinNow": "Genforbind nu",
"remoteControlAllowedMessage": "{{user}} accepterede din anmodning om fjernbetjening!",
@@ -706,8 +704,6 @@
"googlePrivacyPolicy": "Google Privatlivspolitik",
"inProgress": "Optagelse eller livestreaming i gang",
"invalidStreamKey": "Vilkår og privatlivspolitik gælder KUN hvis der streames til Youtube",
"limitNotificationDescriptionNative": "Din streaming vil være begrænset til {{limit}} min. For ubegrænset streaming prøv {{app}}.",
"limitNotificationDescriptionWeb": "På grund af stor efterspørgsel vil din streaming være begrænset til {{limit}} min. For ubegrænset streaming prøv <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
"off": "Livestreaming stoppede",
"offBy": "{{name}} stoppede livestreaming",
"on": "Livestreaming startede",
@@ -1127,8 +1123,6 @@
"highlightMomentSuccess": "Øjeblik fremhævet",
"highlightMomentSucessDescription": "Dit fremhævede øjeblik vil blive føjet til mødesammendrag.",
"inProgress": "Optagelse eller livestreaming i gang",
"limitNotificationDescriptionNative": "På grund af stor efterspørgsel vil din optagelse være begrænset til {{limit}} min. For ubegrænsede optagelser prøv <3> {{app}} </3>.",
"limitNotificationDescriptionWeb": "På grund af stor efterspørgsel vil din optagelse være begrænset til {{limit}} min. For ubegrænsede optagelser kan du prøve <a href={1y rel='noopener noreferrer' Target='_blank'> {{app}} </a>.",
"linkGenerated": "Vi har genereret et link til din optagelse.",
"localRecordingNoNotificationWarning": "Optagelsen vil ikke blive annonceret til andre deltagere. Du bliver nødt til at fortælle dem, at mødet er optaget.",
"localRecordingNoVideo": "Video optages ikke",

View File

@@ -227,6 +227,9 @@
"video_ssrc": "Video-SSRC:",
"yes": "Ja"
},
"customPanel": {
"close": "Schließen"
},
"dateUtils": {
"earlier": "Früher",
"today": "Heute",
@@ -380,6 +383,8 @@
"lockRoom": "Konferenz$t(lockRoomPassword) hinzufügen",
"lockTitle": "Sperren fehlgeschlagen",
"login": "Anmelden",
"loginFailed": "Anmeldung fehlgeschlagen.",
"loginOnResume": "Ihre Anmeldung ist abgelaufen. Sie müssen sich neu anmelden um weiter an der Konferenz teilzunehmen.",
"loginQuestion": "Sind Sie sicher, dass sie sich anmelden und die Konferenz verlassen möchten?",
"logoutQuestion": "Sind Sie sicher, dass Sie sich abmelden und die Konferenz verlassen möchten?",
"logoutTitle": "Abmelden",
@@ -440,9 +445,7 @@
"recentlyUsedObjects": "Ihre zuletzt verwendeten Objekte",
"recording": "Aufnahme",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Während eines Livestreams nicht möglich",
"recordingInProgressDescription": "Diese Konferenz wird aufgezeichnet und von KI analysiert {{learnMore}}. Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.",
"recordingInProgressDescriptionFirstHalf": "Diese Konferenz wird aufgezeichnet und von KI analysiert",
"recordingInProgressDescriptionSecondHalf": ". Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.",
"recordingInProgressDescription": "Diese Konferenz wird aufgezeichnet und von KI analysiert. Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.",
"recordingInProgressTitle": "Aufnahme läuft",
"rejoinNow": "Jetzt erneut beitreten",
"remoteControlAllowedMessage": "{{user}} hat die Anfrage zur Fernsteuerung angenommen!",
@@ -589,6 +592,7 @@
"newFileNotification": "{{ participantName }} hat Datei '{{ fileName }}' hochgeladen",
"removeFile": "Entfernen",
"removeFileSuccess": "Datei erfolgreich entfernt",
"uploadDisabled": "Keine Berechtigung, Dateien hochzuladen. Bitte bei der Moderation anfragen.",
"uploadFailedDescription": "Bitte versuchen Sie es erneut.",
"uploadFailedTitle": "Dateiupload fehlgeschlagen",
"uploadFile": "Datei hochladen"
@@ -706,8 +710,6 @@
"googlePrivacyPolicy": "Google-Datenschutzerklärung",
"inProgress": "Livestreaming gestartet",
"invalidStreamKey": "Der Livestream-Schlüssel ist u. U. falsch.",
"limitNotificationDescriptionNative": "Ihr Stream ist begrenzt auf {{limit}} Min. Für unlimitiertes Streaming, nutzen Sie bitte {{app}}.",
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihr Stream auf {{limit}} Min. begrenzt. Für unlimitiertes Streaming nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Livestream gestoppt",
"offBy": "{{name}} stoppte den Livestream",
"on": "Livestream",
@@ -1127,8 +1129,6 @@
"highlightMomentSuccess": "Highlight festgehalten",
"highlightMomentSucessDescription": "Ihr festgehaltener Moment wird zur Zusammenfassung der Konferenz hinzugefügt.",
"inProgress": "Aufzeichnung gestartet",
"limitNotificationDescriptionNative": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Link zur Aufzeichnung wurde generiert.",
"localRecordingNoNotificationWarning": "Die Aufzeichnung wird anderen Anwesenden nicht mitgeteilt. Sie müssen diese selbst darauf hinweisen, dass die Konferenz aufgezeichnet wird.",
"localRecordingNoVideo": "Videos werden nicht aufgenommen",
@@ -1315,6 +1315,7 @@
"chat": "Chatfenster öffnen / schließen",
"clap": "Klatschen",
"closeChat": "Chat schließen",
"closeCustomPanel": "Schließen",
"closeMoreActions": "„Weitere Einstellungen“ schließen",
"closeParticipantsPane": "Anwesendenliste schließen",
"closedCaptions": "Untertitel",
@@ -1420,9 +1421,11 @@
"chat": "Chat öffnen / schließen",
"clap": "Klatschen",
"closeChat": "Chat schließen",
"closeCustomPanel": "Schließen",
"closeParticipantsPane": "Anwesenheitsliste schließen",
"closeReactionsMenu": "Interaktionsmenü schließen",
"closedCaptions": "Untertitel",
"copilot": "Copilot",
"disableNoiseSuppression": "Rauschunterdrückung deaktivieren",
"disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren",
"documentClose": "Geteiltes Dokument schließen",

View File

@@ -543,8 +543,6 @@
"googlePrivacyPolicy": "regule k woplěwanju datow pla Google",
"inProgress": "Livestreaming jo se zachopił",
"invalidStreamKey": "Kluc za livestream jo ewentuelnje wopacny.",
"limitNotificationDescriptionNative": "Waš stream jo na {{limit}} minutow wobgranicowany. Za njelimitěrowany streaming, wužywajśo aplikaciju {{app}}.",
"limitNotificationDescriptionWeb": "Dla intensiwnego wužywanja jo Waš stream na {{limit}} minutow wobgranicowany. Za njelimitěrowany streaming wužywajśo aplikaciju <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Livestream jo zastajony",
"offBy": "{{name}} jo livestream zastajił",
"on": "livestream",
@@ -905,8 +903,6 @@
"highlightMomentSuccess": "highlight jo se markěrował",
"highlightMomentSucessDescription": "Waš markěrowany moment pśidajo se k wopowěsći wót zmakanja.",
"inProgress": "Nagrawanje abo livestream jo we źěle",
"limitNotificationDescriptionNative": "Dla intensiwnego wužywanja jo Wašo nagrawanje na {{limit}} minutow wobgranicowane. Za njelimitěrowane nagrawanje wužyj aplikaciju <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Dla intensiwnego wužywanja jo Wašo nagrawanje na {{limit}} minutow wobgranicowane. Za njelimitěrowane nagrawanje wužyjśo aplikaciju <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Link k nagrawanju jo se generěrował.",
"live": "LIVE",
"localRecordingNoNotificationWarning": "Druge wobźělniki njedostanu powěsći wót nagrawanja. Wy musyśo jich sami informěrowaś, až konferenca se nagrawa.",

View File

@@ -560,8 +560,6 @@
"googlePrivacyPolicy": "Πολιτική Απορρήτου της Google",
"inProgress": "Εγγραφή ή ζωντανή ροή σε εξέλιξη",
"invalidStreamKey": "Το κλειδί ζωντανής ροής μπορεί να είναι εσφαλμένο.",
"limitNotificationDescriptionNative": "Η ροή σας θα περιοριστεί σε {{limit}} λεπτά. Για ροή χωρίς όρια δοκιμάστε το {{app}}.",
"limitNotificationDescriptionWeb": "Λόγω υψηλής ζήτησης η ροή θα περιοριστεί σε {{limit}} λεπτά. Για απεριόριστες ροές δοκιμάστε το <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Η Ζωντανή Ροή σταμάτησε",
"offBy": "{{name}} σταμάτησε τη ζωντανή ροή",
"on": "Η Ζωντανή Ροή ξεκίνησε",
@@ -919,8 +917,6 @@
"highlightMomentSuccess": "Η στιγμή επισημάνθηκε",
"highlightMomentSucessDescription": "Οι επισημασμένη στιγμή θα προστεθεί στη περίληψη της σύσκεψης.",
"inProgress": "Σε εξέλιξη καταγραφή ή ζωντανή ροή",
"limitNotificationDescriptionNative": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιοριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε το <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιοριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε το <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Δημιουργήσαμε ένα σύνδεσμο για τη καταγραφή σας.",
"live": "ΖΩΝΤΑΝΑ",
"localRecordingNoNotificationWarning": "Η καταγραφή δεν θα κοινοποιηθεί στους άλλους συμμετέχοντες. Θα πρέπει εσείς να τους ενημερώσετε ότι η σύσκεψη καταγράφεται.",

View File

@@ -621,8 +621,6 @@
"googlePrivacyPolicy": "Privatecpolitiko de Google",
"inProgress": "Registrado aŭ vivelsendo farata",
"invalidStreamKey": "La ŝlosilo de tuja elsendfluo povas esti malĝusta.",
"limitNotificationDescriptionNative": "Via vivelsendo estos limigita al {{limit}} minutoj. Por senlima vivelsendo provu {{ app}}.",
"limitNotificationDescriptionWeb": "Pro alta postulo, via vivelsendo estos limigita al {{limit}} minutoj. Por senlima vivelsendo provu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Tuja elsendfluo finiĝis",
"offBy": "{{name}} ĉesigis la tujan elsendfluon",
"on": "Tuja elsendfluo",
@@ -996,8 +994,6 @@
"highlightMomentSuccess": "Momento emfazita",
"highlightMomentSucessDescription": "Via emfazita momento estos aldonita al la kunveno priskribo",
"inProgress": "Registrado aŭ vivelsendo farata",
"limitNotificationDescriptionNative": "Pro alta postulo via registrado estos limigita al {{ limo }} minutoj. Pro senlima registrado, provu <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Pro alta postulo via registrado estos limigita al {{ limo }} minutoj. Pro senlima registrado, provu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Ni generis ligilon al via registrado.",
"live": "LIVE",
"localRecordingNoNotificationWarning": "La registrado ne estos anoncita al aliaj partoprenantoj. Vi devos sciigi al ili, ke la renkontiĝo estas registrita.",

View File

@@ -502,8 +502,6 @@
"getStreamKeyManually": "No pudimos encontrar tu clave de transmisión. Por favor, obtenla de la página de YouTube y pégala.",
"googlePrivacyPolicy": "Política de Privacidad de Google",
"invalidStreamKey": "Es posible que la clave de transmisión sea incorrecta, o no es de YouTube.",
"limitNotificationDescriptionNative": "Su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en {{app}}.",
"limitNotificationDescriptionWeb": "Debido a la alta demanda su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Se detuvo la transmisión",
"offBy": "{{name}} detuvo la transmisión",
"on": "Transmitiendo en vivo",
@@ -800,8 +798,6 @@
"expandedPending": "La grabación se está iniciando…",
"failedToStart": "No se pudo iniciar la grabación",
"fileSharingdescription": "Compartir la grabación con los participantes de la reunión",
"limitNotificationDescriptionNative": "Su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Debido a la alta demanda su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Hemos generado un enlace a su grabación.",
"live": "EN VIVO",
"loggedIn": "Sesión iniciada como {{userName}}",

View File

@@ -578,8 +578,6 @@
"googlePrivacyPolicy": "Política de Privacidad de Google",
"inProgress": "Grabación o transmisión en vivo en curso",
"invalidStreamKey": "Es posible que la clave de transmisión sea incorrecta, o no es de YouTube.",
"limitNotificationDescriptionNative": "Su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en {{app}}.",
"limitNotificationDescriptionWeb": "Debido a la alta demanda su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Se detuvo la transmisión",
"offBy": "{{name}} detuvo la transmisión",
"on": "Transmitiendo en vivo",
@@ -947,8 +945,6 @@
"highlightMomentSuccess": "Momento destacado",
"highlightMomentSucessDescription": "Su momento destacado será agregado al resumen de la reunión.",
"inProgress": "Grabación o transmisión en vivo en curso",
"limitNotificationDescriptionNative": "Su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Debido a la alta demanda su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Hemos generado un enlace a su grabación.",
"live": "EN VIVO",
"localRecordingNoNotificationWarning": "La grabación no será anunciada al resto de participantes. Necesitarás hacerles saber que la reunión está siendo grabada.",

View File

@@ -444,8 +444,6 @@
"getStreamKeyManually": "Ezin izan dugu zure transmisio-gakoa bilatu. Lortu ezazu YouTuberen webgunetik.",
"googlePrivacyPolicy": "Google-en pribatutasun-politika",
"invalidStreamKey": "Zuzeneko transmisioaren gakoa okerra izan daiteke.",
"limitNotificationDescriptionNative": "Zure emanaldia {{limit}} minutura mugatuta dago. Mugarik gabekoa nahi baduzu probatu {{app}}.",
"limitNotificationDescriptionWeb": "Zuzeneko emanaldien arrakasta dela eta {{limit}} minutura mugatuta daude. Mugarik gabekoa nahi baduzu probatu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Zuzeneko transmisioa gelditu da",
"offBy": "{{name}} erabiltzaileak zuzeneko emanaldia gelditu du",
"on": "Zuzeneko transmisioa",
@@ -685,8 +683,6 @@
"expandedPending": "Grabaketa abian da…",
"failedToStart": "Grabazioa hasteak huts egin du",
"fileSharingdescription": "Partekatu grabazioa bileraren parte-hartzaileekin",
"limitNotificationDescriptionNative": "Zure grabazioa {{limit}} minutura mugatuta dago. Mugarik gabeko grabazioak izateko probatu <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Zure grabazioa {{limit}} minutura mugatuta dago. Mugarik gabeko grabazioak izateko probatu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"live": "ZUZENEAN",
"loggedIn": "{{userName}} gisa saioa hasita",
"off": "Grabazioa gelditu da",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -359,7 +359,7 @@
"kickParticipantTitle": "Expulser ce membre?",
"kickSystemTitle": "Oups ! Vous avez été expulsé de la réunion",
"kickTitle": "Expulsé de la réunion",
"learnMore": "en savoir plus",
"learnMore": "En savoir plus",
"linkMeeting": "Relier la réunion",
"linkMeetingTitle": "Relier la réunion à Salesforce",
"liveStreaming": "Diffusion en direct",
@@ -429,9 +429,7 @@
"recentlyUsedObjects": "Vos objets récemment utilisés",
"recording": "Enregistrement",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct",
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA{{learnMore}}. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
"recordingInProgressDescriptionFirstHalf": "Cette réunion est en cours d'enregistrement et d'analyse par IA",
"recordingInProgressDescriptionSecondHalf": ". Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
"recordingInProgressTitle": "Enregistrement en cours",
"rejoinNow": "Rejoindre maintenant",
"remoteControlAllowedMessage": "{{user}} a accepté votre demande de contrôle à distance!",
@@ -692,8 +690,6 @@
"googlePrivacyPolicy": "Politique de confidentialité de Google",
"inProgress": "Enregisrtement ou diffusion en cours",
"invalidStreamKey": "La clé de diffusion en direct peut être erronée.",
"limitNotificationDescriptionNative": "Votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez {{app}}.",
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
"off": "La diffusion en direct s'est arrêtée",
"offBy": "{{name}} a arrêté la diffusion en continu",
"on": "Diffusion en direct",
@@ -1111,8 +1107,6 @@
"highlightMomentSuccess": "Moment souligné",
"highlightMomentSucessDescription": "Votre moment souligné sera ajouté au résumé de la réunion.",
"inProgress": "Enregistrement ou diffusion en cours",
"limitNotificationDescriptionNative": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <3> {{app}} </3>.",
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
"linkGenerated": "Nous avons généré un lien à votre enregistrement.",
"localRecordingNoNotificationWarning": "Le démarrage de lenregistrement ne sera pas annoncé aux autres participants. Vous devrez les informer par vous-même que la réunion sera enregistrée.",
"localRecordingNoVideo": "La vidéo n'est pas en cours denregistrement",

View File

@@ -114,6 +114,9 @@
"error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}",
"everyone": "Tout le monde",
"fieldPlaceHolder": "Tapez votre message ici",
"fileAccessibleTitle": "{{user}} a téléversé un fichier",
"fileAccessibleTitleMe": "jai téléversé un fichier",
"fileDeleted": "Un fichier a été supprimé",
"guestsChatIndicator": "(invité)",
"lobbyChatMessageTo": "Message de salle d'attente à {{recipient}}",
"message": "Message",
@@ -123,8 +126,16 @@
"messagebox": "Envoyer un message",
"newMessages": "Nouveaux messages",
"nickname": {
"featureChat": "chat",
"featureClosedCaptions": "sous-titres",
"featureFileSharing": "partage de fichiers",
"featurePolls": "sondages",
"popover": "Choisissez un pseudonyme",
"title": "Entrez un pseudonyme pour utiliser le chat",
"titleWith1Features": "Entrez un pseudonyme pour utiliser {{feature1}}",
"titleWith2Features": "Entrez un pseudonyme pour utiliser {{feature1}} et {{feature2}}",
"titleWith3Features": "Entrez un pseudonyme pour utiliser {{feature1}}, {{feature2}} et {{feature3}}",
"titleWith4Features": "Entrez un pseudonyme pour utiliser {{feature1}}, {{feature2}}, {{feature3}} et {{feature4}}",
"titleWithCC": "Entrez un pseudonyme pour utiliser le chat et les sous-titres",
"titleWithPolls": "Entrez un pseudonyme pour utiliser le chat et les sondages",
"titleWithPollsAndCC": "Entrez un pseudonyme pour utiliser le chat, les sondages et les sous-titres",
@@ -216,6 +227,9 @@
"video_ssrc": "Video SSRC :",
"yes": "oui"
},
"customPanel": {
"close": "Fermer"
},
"dateUtils": {
"earlier": "Plus tôt",
"today": "Aujourd'hui",
@@ -359,7 +373,7 @@
"kickParticipantTitle": "Expulser ce participant ?",
"kickSystemTitle": "Oups ! Vous avez été expulsé de la réunion",
"kickTitle": "Oups ! vous avez été expulsé(e) par {{participantDisplayName}}",
"learnMore": "en savoir plus",
"learnMore": "En savoir plus",
"linkMeeting": "Relier la conférence",
"linkMeetingTitle": "Relier la conférence à Salesforce",
"liveStreaming": "Direct",
@@ -429,9 +443,7 @@
"recentlyUsedObjects": "Vos objets récemment utilisés",
"recording": "Enregistrement",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct",
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA{{learnMore}}. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
"recordingInProgressDescriptionFirstHalf": "Cette réunion est en cours d'enregistrement et d'analyse par IA",
"recordingInProgressDescriptionSecondHalf": ". Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
"recordingInProgressTitle": "Enregistrement en cours",
"rejoinNow": "Rejoindre maintenant",
"remoteControlAllowedMessage": "{{user}} a accepté votre demande de prise en main à distance !",
@@ -522,6 +534,7 @@
"tokenAuthFailedWithReasons": "Désolé, vous nêtes pas autorisé à rejoindre lappel. La raison possible : {{reason}}.",
"tokenAuthUnsupported": "Token URL n'est pas supporté.",
"transcribing": "Transcription",
"unauthenticatedAccessDisabled": "Cet appel nécessite une authentification. Veuillez vous connecter pour continuer.",
"unlockRoom": "Supprimer le $t(lockRoomPassword) de la réunion",
"user": "Utilisateur",
"userIdentifier": "Identifiant utilisateur",
@@ -569,10 +582,12 @@
"downloadStarted": "Téléchargement de fichier démarré",
"dragAndDrop": "Glissez et déposez des fichiers ici ou n'importe où sur l'écran",
"fileAlreadyUploaded": "Le fichier a déjà été téléchargé vers cette réunion.",
"fileRemovedByOther": "Votre fichier « {{ fileName }} » a été supprimé",
"fileTooLargeDescription": "Veuillez vous assurer que le fichier ne dépasse pas {{ maxFileSize }}.",
"fileTooLargeTitle": "Le fichier sélectionné est trop volumineux",
"fileUploadProgress": "Progression du téléchargement de fichier",
"fileUploadedSuccessfully": "Fichier téléchargé avec succès",
"newFileNotification": "{{ participantName }} a partagé « {{ fileName }} »",
"removeFile": "Supprimer",
"removeFileSuccess": "Fichier supprimé avec succès",
"uploadFailedDescription": "Veuillez réessayer.",
@@ -692,8 +707,6 @@
"googlePrivacyPolicy": "Politique de confidentialité de Google",
"inProgress": "Enregisrtement ou diffusion en cours",
"invalidStreamKey": "La clé de diffusion en direct n'est peut-être pas correcte.",
"limitNotificationDescriptionNative": "Votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez {{app}}.",
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
"off": "La diffusion en direct (streaming) a été arrêté",
"offBy": "{{name}} a arrêté la diffusion en direct",
"on": "En direct",
@@ -964,6 +977,9 @@
"by": "Par {{ name }}",
"closeButton": "Fermer le sondage",
"create": {
"accessibilityLabel": {
"send": "Envoyer le sondage"
},
"addOption": "Ajouter une option",
"answerPlaceholder": "Option {{index}}",
"cancel": "Annuler",
@@ -972,8 +988,7 @@
"pollQuestion": "Question du sondage",
"questionPlaceholder": "Poser une question",
"removeOption": "Supprimer l'option",
"save": "Enregistrer",
"send": "Envoyer"
"save": "Enregistrer"
},
"errors": {
"notUniqueOption": "Les options doivent être uniques"
@@ -1111,8 +1126,6 @@
"highlightMomentSuccess": "Moment souligné",
"highlightMomentSucessDescription": "Votre moment souligné sera ajouté au résumé de la réunion.",
"inProgress": "Enregistrement ou diffusion en cours",
"limitNotificationDescriptionNative": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <3> {{app}} </3>.",
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
"linkGenerated": "Nous avons généré un lien à votre enregistrement.",
"localRecordingNoNotificationWarning": "Le démarrage de lenregistrement ne sera pas annoncé aux autres participants. Vous devrez les informer par vous-même que la réunion sera enregistrée.",
"localRecordingNoVideo": "La vidéo n'est pas en cours denregistrement",
@@ -1299,6 +1312,7 @@
"chat": "Afficher / Masquer la discussion instantanée",
"clap": "Applaudir",
"closeChat": "Fermer la discussion instantanée",
"closeCustomPanel": "Fermer",
"closeMoreActions": "Fermer le menu plus d'actions",
"closeParticipantsPane": "Fermer le panneau des participants",
"closedCaptions": "Sous-titres",
@@ -1404,9 +1418,11 @@
"chat": "Ouvrir / Fermer le chat",
"clap": "Applaudir",
"closeChat": "Fermer le chat",
"closeCustomPanel": "Fermer",
"closeParticipantsPane": "Fermer le panneau des participants",
"closeReactionsMenu": "Fermer le menu réactions",
"closedCaptions": "Sous-titres",
"copilot": "Copilot",
"disableNoiseSuppression": "Arrêter la suppression du bruit",
"disableReactionSounds": "Vous pouvez interdire les réactions sonores à cette réunion",
"documentClose": "Fermer le document partagé",
@@ -1421,6 +1437,7 @@
"exitFullScreen": "Quitter le mode plein écran",
"exitTileView": "Quitter le mode mosaïque",
"feedback": "Laisser des commentaires",
"fileSharing": "Partage de fichiers",
"giphy": "Activer/désactiver le menu GIPHY",
"hangup": "Quitter",
"help": "Aide",
@@ -1456,6 +1473,7 @@
"openReactionsMenu": "Ouvrir le menu Réactions",
"participants": "Participants",
"pip": "Entrer en mode Picture-in-Picture",
"polls": "Sondages",
"privateMessage": "Envoyer un message privé",
"profile": "Éditer votre profil",
"raiseHand": "Lever / Baisser la main",

View File

@@ -1,10 +1,14 @@
{
"addPeople": {
"accessibilityLabel": {
"meetingLink": "मीटिंग लिंक: {{url}}"
},
"add": "आमंत्रित करें",
"addContacts": "संपर्क सूची से आमंत्रित करे",
"contacts": "संपर्क",
"copyInvite": "मीटिंग के आमंत्रण कि प्रतिलिपि बनाये",
"copyLink": "मीटिंग कि लिंक कि प्रतिलिपि बनाये",
"copyStream": "सीधे प्रसारण कि लिंक कि प्रतिलिपि बनाये",
"copyStream": "सीधे प्रसारण कि लिंक कि प्रतिलिपि बनाये",
"countryNotSupported": "अभी हम इस गतव्य के लिये सक्षम न‍ही है ।",
"countryReminder": "यू.एस. के बाहर से काल कर रहे है तो कृपया सुनिश्चित करे कि अपने देश के कोड़ से प्रारंभ कर रहे है !",
"defaultEmail": "अपना ई-मेल पता लिखें",
@@ -35,6 +39,7 @@
},
"audioDevices": {
"bluetooth": "ब्लूटूथ",
"car": "कार ऑडियो",
"headphones": "हेडफ़ोन",
"none": "कोई ऑडियो डिवाइस उपलब्ध नहीं",
"phone": "फ़ोन",
@@ -43,9 +48,47 @@
"audioOnly": {
"audioOnly": "लो बैंडविड्थ"
},
"bandwidthSettings": {
"assumedBandwidthBps": "उदाहरण: 10 Mbps के लिए 10000000",
"assumedBandwidthBpsWarning": "अधिक मान नेटवर्क समस्याएँ पैदा कर सकते हैं।",
"customValue": "कस्टम मान",
"customValueEffect": "वास्तविक bps मान सेट करने के लिए",
"leaveEmpty": "खाली छोड़ें",
"leaveEmptyEffect": "अनुमान लगाने की अनुमति देने के लिए",
"possibleValues": "संभावित मान",
"setAssumedBandwidthBps": "अनुमानित बैंडविड्थ (bps)",
"title": "बैंडविड्थ सेटिंग्स",
"zeroEffect": "वीडियो अक्षम करने के लिए"
},
"breakoutRooms": {
"actions": {
"add": "ब्रेकआउट रूम जोड़ें",
"autoAssign": "ब्रेकआउट रूम में स्वतः असाइन करें",
"close": "बंद करें",
"join": "जॉइन करें",
"leaveBreakoutRoom": "ब्रेकआउट रूम छोड़ें",
"more": "और",
"remove": "हटाएँ",
"rename": "नाम बदलें",
"renameBreakoutRoom": "ब्रेकआउट रूम का नाम बदलें",
"sendToBreakoutRoom": "प्रतिभागी को भेजें:"
},
"breakoutList": "ब्रेकआउट सूची",
"buttonLabel": "ब्रेकआउट रूम",
"defaultName": "ब्रेकआउट रूम #{{index}}",
"hideParticipantList": "प्रतिभागी सूची छिपाएँ",
"mainRoom": "मुख्य रूम",
"notifications": {
"joined": "\"{{name}}\" ब्रेकआउट रूम में शामिल हो रहे हैं",
"joinedMainRoom": "मुख्य रूम में शामिल हो रहे हैं",
"joinedTitle": "ब्रेकआउट रूम"
},
"showParticipantList": "प्रतिभागी सूची दिखाएँ",
"title": "ब्रेकआउट रूम"
},
"calendarSync": {
"addMeetingURL": "एक मीटिंग लिंक जोड़ें",
"confirmAddLink": "क्या आप इस इवेंट में एक Jitsi लिंक जोड़ना चाहते हैं?",
"confirmAddLink": "क्या आप इस इवेंट में एक जित्सी लिंक जोड़ना चाहते हैं?",
"error": {
"appConfiguration": "कैलेंडर एकीकरण ठीक से कॉन्फ़िगर नहीं किया गया है।",
"generic": "एक त्रुटि हुई है। कृपया अपनी कैलेंडर सेटिंग जांचें या कैलेंडर को रीफ़्रेश करने का प्रयास करें।",
@@ -61,28 +104,72 @@
"refresh": "कैलेंडर रीफ़्रेश करें",
"today": "आज"
},
"carmode": {
"actions": {
"selectSoundDevice": "साउंड डिवाइस चुनें"
},
"labels": {
"buttonLabel": "कार मोड",
"title": "कार मोड",
"videoStopped": "आपका वीडियो बंद है"
}
},
"chat": {
"disabled": "चैट संदेश भेजना अक्षम है।",
"enter": "चैट रूम में प्रवेश करें",
"error": "त्रुटि: आपका संदेश नहीं भेजा गया । कारण: {{error}}",
"everyone": "सभी",
"fieldPlaceHolder": "अपना संदेश यहां लिखें",
"fileAccessibleTitle": "{{user}} ने एक फ़ाइल अपलोड की",
"fileAccessibleTitleMe": "मैंने एक फ़ाइल अपलोड की",
"fileDeleted": "एक फ़ाइल हटा दी गई",
"guestsChatIndicator": "(अतिथि)",
"messageTo": "{{recipient}} के लिए निजी संदेश",
"messagebox": "एक संदेश टाइप करें",
"newMessages": "नए संदेश",
"nickname": {
"featureChat": "चैट",
"featureClosedCaptions": "बंद कैप्शन",
"featureFileSharing": "फ़ाइल साझा करना",
"featurePolls": "पोल",
"popover": "एक उपनाम चुनें",
"title": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWithPolls": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें"
"titleWith1Features": "{{feature1}} का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWith2Features": "{{feature1}} और {{feature2}} का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWith3Features": "{{feature1}}, {{feature2}} और {{feature3}} का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWith4Features": "{{feature1}}, {{feature2}}, {{feature3}} और {{feature4}} का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWithCC": "चैट और बंद कैप्शन का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWithPolls": "चैट और पोल का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWithPollsAndCC": "चैट, पोल और बंद कैप्शन का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWithPollsAndCCAndFileSharing": "चैट, पोल, बंद कैप्शन और फ़ाइलों का उपयोग करने के लिए एक उपनाम दर्ज करें"
},
"noMessagesMessage": "अभी तक मीटिंग में कोई संदेश नहीं आया है। वार्तालाप प्रारंभ करें!",
"privateNotice": "{{recipient}} के लिए निजी संदेश",
"sendButton": "भेजें",
"smileysPanel": "इमोजी पैनल",
"systemDisplayName": "सिस्टम",
"tabs": {
"chat": "चैट",
"closedCaptions": "सीसी",
"fileSharing": "फ़ाइलें",
"polls": "पोल"
},
"title": "चैट",
"titleWithPolls": "चैट",
"titleWithCC": "सीसी",
"titleWithFeatures": "चैट और",
"titleWithFileSharing": "फ़ाइलें",
"titleWithPolls": "पोल",
"you": "आप"
},
"chromeExtensionBanner": {
"buttonText": "क्रोम एक्सटेंशन इंस्टॉल करें",
"dontShowAgain": "मुझे यह फिर से न दिखाएं",
"installExtensionText": ",गूगल कैलेंडर और ऑफिस 365 एकीकरण के लिए एक्सटेंशन इंस्टॉल करें"
"buttonTextEdge": "Edge एक्सटेंशन इंस्टॉल करें",
"close": "बंद करें",
"dontShowAgain": "मुझे यह फिर से न दिखाएं"
},
"closedCaptionsTab": {
"emptyState": "मॉडरेटर द्वारा शुरू किए जाने पर बंद कैप्शन की सामग्री उपलब्ध होगी",
"startClosedCaptionsButton": "बंद कैप्शन शुरू करें"
},
"connectingOverlay": {
"joiningRoom": "आपको आपकी मीटिंग से कनेक्ट किया जा रहा है…"
@@ -110,6 +197,7 @@
"bridgeCount": "सर्वर गणना: ",
"codecs": "कोडेक (ए/वी): ",
"connectedTo": "से जुड़ा हुआ है :",
"e2eeVerified": "E2EE सत्यापित:",
"framerate": "फ्रेम दर:",
"less": "कम दिखाएं",
"localaddress": "स्थानीय पता:",
@@ -136,7 +224,8 @@
"status": "सम्पर्क:",
"transport": "ट्रांसपोर्ट :",
"transport_plural": "ट्रांसपोर्ट्स:",
"video_ssrc": "वीडियो एस.आर.सी.सी.:"
"video_ssrc": "वीडियो एस.आर.सी.सी.:",
"yes": "हाँ"
},
"dateUtils": {
"earlier": "पिछला कल",
@@ -146,14 +235,25 @@
"deepLinking": {
"appNotInstalled": "आपको अपने फ़ोन पर इस मीटिंग में शामिल होने के लिए {{app}} मोबाइल ऐप की आवश्यकता है। ",
"description": "हमने आपकी मीटिंग {{app}} डेस्कटॉप ऐप में लॉन्च करने की कोशिश की। कुछ नहीं हुआ? फिर से कोशिश करें या {{app}} वेब ऐप में लॉन्च करें।",
"descriptionNew": "कुछ नहीं हुआ? हमने आपकी मीटिंग को {{app}} डेस्कटॉप ऐप में खोलने की कोशिश की। <br /><br /> आप दोबारा प्रयास कर सकते हैं या इसे वेब पर खोल सकते हैं।",
"descriptionWithoutWeb": "हमने आपकी मीटिंग {{app}} डेस्कटॉप ऐप में लॉन्च करने की कोशिश की। कुछ नहीं हुआ?",
"downloadApp": "एप्लिकेशन डाउनलोड करें",
"downloadMobileApp": "App Store से डाउनलोड करें",
"ifDoNotHaveApp": "यदि आपके पास अभी तक ऐप नहीं है:",
"ifHaveApp": "यदि आपके पास पहले से ही ऐप है:",
"joinInApp": "ऐप का उपयोग करके इस मीटिंग में शामिल हों",
"joinInAppNew": "ऐप में जुड़ें",
"joinInBrowser": "ब्राउज़र में जुड़ें",
"launchMeetingLabel": "आप इस मीटिंग में कैसे जुड़ना चाहते हैं?",
"launchWebButton": "वेब में लॉन्च करे",
"noDesktopApp": "क्या आपके पास ऐप नहीं है?",
"noMobileApp": "क्या आपके पास ऐप नहीं है?",
"or": "या",
"termsAndConditions": "जारी रखने पर आप हमारी <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>नियम और शर्तों</a> से सहमत होते हैं।",
"title": "{{app}} में आपकी मीटिंग शुरू की जा रही हैं…",
"tryAgainButton": "डेस्कटॉप में फिर से प्रयास करें"
"titleNew": "आपकी मीटिंग शुरू की जा रही है…",
"tryAgainButton": "डेस्कटॉप में फिर से प्रयास करें",
"unsupportedBrowser": "ऐसा लगता है कि आप ऐसे ब्राउज़र का उपयोग कर रहे हैं जिसे हम सपोर्ट नहीं करते।"
},
"defaultLink": "उदाहरण {{url}}",
"defaultNickname": "उदा. सतीष कुमार",
@@ -164,6 +264,12 @@
"microphonePermission": "माइक्रोफ़ोन अनुमति प्राप्त करने में त्रुटि"
},
"deviceSelection": {
"hid": {
"callControl": "कॉल नियंत्रण",
"connectedDevices": "कनेक्टेड डिवाइस:",
"deleteDevice": "डिवाइस हटाएँ",
"pairDevice": "डिवाइस जोड़ें"
},
"noPermission": "अनुमति नहीं दी गई",
"previewUnavailable": "पूर्वदर्शन अनुपलब्ध",
"selectADevice": "डिवाइस का चयन करें",
@@ -178,16 +284,23 @@
"IamHost": "मैं मेजबान हूँ",
"Ok": "ठीक है",
"Remove": "निकालें",
"Share": "Share",
"Share": "साझा करें",
"Submit": "सबमिट करें",
"Understand": "मैं समझता/समझती हूँ, अभी मुझे म्यूट रखें",
"UnderstandAndUnmute": "मैं समझता/समझती हूँ, कृपया मुझे अनम्यूट करें",
"WaitForHostMsg": "सम्मेलन अभी तक शुरू नहीं हुआ है। यदि आप मेजबान हैं तो कृपया प्रमाणित करें। अन्यथा, कृपया मेजबान के आने की प्रतीक्षा करें।",
"WaitingForHostButton": "मॉडरेटर की प्रतीक्षा करें",
"WaitingForHostTitle": "होस्ट की प्रतीक्षा कर रहा है…",
"Yes": "हाँ",
"accessibilityLabel": {
"liveStreaming": "सीधा प्रसारण"
},
"add": "जोड़ें",
"addMeetingNote": "इस मीटिंग के बारे में एक नोट जोड़ें",
"addOptionalNote": "एक नोट जोड़ें (वैकल्पिक):",
"allow": "अनुमति दें",
"allowToggleCameraDialog": "क्या आप {{initiatorName}} को आपके कैमरे का फ़ेसिंग मोड बदलने की अनुमति देते हैं?",
"allowToggleCameraTitle": "कैमरा बदलने की अनुमति दें?",
"alreadySharedVideoMsg": "एक अन्य प्रतिभागी पहले से ही वीडियो साझा कर रहा है। यह सम्मेलन एक समय में केवल एक साझा की अनुमति देता है।",
"alreadySharedVideoTitle": "एक समय में केवल एक साझा वीडियो की अनुमति है",
"applicationWindow": "एप्लिकेशन विंडो",
@@ -212,7 +325,7 @@
"connectErrorWithMsg": "उफ़! कुछ गड़बड़ हो गई और हम सम्मेलन से नहीं जुड़ सके: {{msg}}",
"connecting": "संपर्क जोड़ा जा रहा है ",
"contactSupport": "सहयोग के लिए संपर्क करें",
"copied": "प्रतिलिपि बनाई गयी ",
"copied": "प्रतिलिपि बनाई गयी",
"copy": "प्रतिलिपि बनाये",
"dismiss": "खारिज करें",
"displayNameRequired": "नमस्ते! आपका नाम क्या है?",
@@ -279,7 +392,7 @@
"readMore": "अधिक",
"recording": "रिकॉर्डिंग",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "संभव नहीं है जब एक लाइव स्ट्रीम सक्रिय है",
"recordingDisabledTooltip": "रिकॉर्डिंग शुरू करना अक्षम करें.",
"recordingDisabledTooltip": "रिकॉर्डिंग शुरू करना अक्षम करें|",
"rejoinNow": "पुनः जुड़े",
"remoteControlAllowedMessage": "{{user}} ने आपका रिमोट कंट्रोल अनुरोध स्वीकार कर लिया!",
"remoteControlDeniedMessage": "{{user}} ने आपका रिमोट कंट्रोल अनुरोध अस्वीकार कर दिया!",
@@ -295,7 +408,7 @@
"reservationErrorMsg": "Error code: {{code}}, message: {{msg}}",
"retry": "पुनः प्रयास करें",
"screenSharingAudio": "ऑडियो साझा करें",
"screenSharingFailed": "उफ़! कुछ गड़बड़ हो गई, हम स्क्रीन शेयरिंग शुरू करने में सक्षम नहीं थे!",
"screenSharingFailed": "स्क्रीन शेयरिंग शुरू नहीं हो पाई।",
"screenSharingFailedTitle": "स्क्रीन साझा करना विफल हुआ!",
"screenSharingPermissionDeniedError": "उफ़! आपकी स्क्रीन शेयरिंग अनुमतियों में कुछ गड़बड़ हो गई है। कृपया पुनः लोड करें और पुनः प्रयास करें।",
"sendPrivateMessage": "आपने हाल ही में एक निजी संदेश प्राप्त किया है। क्या आप उसका निजी रूप से जवाब देने का इरादा रखते हैं? या आप अपना संदेश समूह को भेजना चाहते हैं?",
@@ -347,6 +460,34 @@
"veryBad": "बहुत बुरा",
"veryGood": "बहुत अच्छा"
},
"fileSharing": {
"downloadFailedDescription": "कृपया फिर से प्रयास करें।",
"downloadFailedTitle": "डाउनलोड विफल",
"downloadFile": "डाउनलोड करें",
"downloadStarted": "फ़ाइल डाउनलोड शुरू हो गया",
"dragAndDrop": "फ़ाइलों को यहाँ या स्क्रीन पर कहीं भी खींचें और छोड़ें",
"fileAlreadyUploaded": "फ़ाइल पहले ही इस मीटिंग में अपलोड हो चुकी है।",
"fileRemovedByOther": "आपकी फ़ाइल '{{ fileName }}' हटा दी गई",
"fileTooLargeDescription": "कृपया सुनिश्चित करें कि फ़ाइल {{ maxFileSize }} से अधिक नहीं है।",
"fileTooLargeTitle": "चयनित फ़ाइल बहुत बड़ी है",
"fileUploadProgress": "फ़ाइल अपलोड प्रगति",
"fileUploadedSuccessfully": "फ़ाइल सफलतापूर्वक अपलोड हो गई",
"newFileNotification": "{{ participantName }} ने '{{ fileName }}' साझा की",
"removeFile": "हटाएँ",
"removeFileSuccess": "फ़ाइल सफलतापूर्वक हटा दी गई",
"uploadFailedDescription": "कृपया फिर से प्रयास करें।",
"uploadFailedTitle": "अपलोड विफल",
"uploadFile": "फ़ाइल साझा करें"
},
"filmstrip": {
"accessibilityLabel": {
"heading": "वीडियो थंबनेल"
}
},
"giphy": {
"noResults": "कोई परिणाम नहीं मिला :(",
"search": "GIPHY खोजें"
},
"helpView": {
"title": "सहायता केंद्र"
},
@@ -362,6 +503,7 @@
"addPassword": "$t(lockRoomPassword)जोड़ें",
"cancelPassword": "$t(lockRoomPassword)रद्द करें",
"conferenceURL": "लिंक:",
"copyNumber": "नंबर कॉपी करें",
"country": "देश",
"dialANumber": "अपनी मीटिंग में शामिल होने के लिए, इनमें से किसी एक नंबर को डायल करें और फिर पिन डालें।",
"dialInConferenceID": "पिन:",
@@ -384,11 +526,16 @@
"noRoom": "डायल-इन करने के लिए कोई कक्ष निर्दिष्ट नहीं किया गया।",
"numbers": "डायल-इन नंबर",
"password": "$t(lockRoomPasswordUppercase):",
"reachedLimit": "आप अपने प्लान की सीमा तक पहुँच चुके हैं।",
"sip": "SIP पता",
"sipAudioOnly": "केवल ऑडियो SIP पता",
"title": "साझा करें",
"tooltip": "इस मीटिंग के लिए लिंक और डायल-इन जानकारी साझा करें"
"tooltip": "इस मीटिंग के लिए लिंक और डायल-इन जानकारी साझा करें",
"upgradeOptions": "कृपया अपग्रेड विकल्पों की जाँच करें",
"whiteboardError": "व्हाइटबोर्ड लोड करने में त्रुटि। कृपया बाद में पुनः प्रयास करें।"
},
"inlineDialogFailure": {
"msg": "We stumbled a bit.",
"msg": "कुछ समस्या हुई।",
"retry": "पुनः प्रयास करें",
"support": "सहायता",
"supportMsg": "ऐसा बार बार हो रहा हो, तो सम्पर्क करे "
@@ -417,6 +564,10 @@
"toggleShortcuts": "कीबोर्ड शॉर्टकट दिखाएं या छिपाएं",
"videoMute": "अपना कैमरा प्रारंभ या बंद करें"
},
"largeVideo": {
"screenIsShared": "आप अपनी स्क्रीन साझा कर रहे हैं",
"showMeWhatImSharing": "मुझे दिखाएँ कि मैं क्या साझा कर रहा हूँ"
},
"liveStreaming": {
"busy": "हम स्ट्रीमिंग संसाधनों को मुक्त करने पर काम कर रहे हैं। कृपया कुछ मिनटों में पुनः प्रयास करें।",
"busyTitle": "सभी स्ट्रीमर वर्तमान में व्यस्त हैं",
@@ -434,8 +585,6 @@
"getStreamKeyManually": "हम कोई लाइव स्ट्रीम प्राप्त नहीं कर सके। कृपया YouTube से अपनी लाइव स्ट्रीम कुंजी प्राप्त करने का प्रयास करें।",
"googlePrivacyPolicy": "Google गोपनीयता नीति",
"invalidStreamKey": "लाइव स्ट्रीम कुंजी गलत हो सकती है।",
"limitNotificationDescriptionNative": "आपकी स्ट्रीमिंग {{limit}} मिनट तक सीमित होगी। असीमित स्ट्रीमिंग के लिए {{app}} आज़माएँ।",
"limitNotificationDescriptionWeb": "अधिक मांग के कारण आपकी स्ट्रीमिंग {{limit}} मिनट तक सीमित होगी। असीमित स्ट्रीमिंग के लिए <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> आज़माएँ।",
"off": "लाइव स्ट्रीमिंग बंद हो गई",
"offBy": "{{name}} ने लाइव स्ट्रीमिंग बंद कर दी",
"on": "लाइव स्ट्रीमिंग शुरू हो गई",
@@ -461,7 +610,7 @@
"emailField": "अपना ईमेल पता दर्ज करें",
"enableDialogPasswordField": "पासवर्ड सेट करें (वैकल्पिक)",
"enableDialogSubmit": "सक्षम करें",
"enableDialogText": "Lobby mode lets you protect your meeting by only allowing people to enter after a formal approval by a moderator.",
"enableDialogText": "लॉबी मोड से आप अपनी मीटिंग को सुरक्षित रख सकते हैं। केवल मॉडरेटर की अनुमति मिलने के बाद ही लोग इसमें शामिल हो पाएंगे।",
"enterPasswordButton": "मीटिंग पासवर्ड दर्ज करें",
"enterPasswordTitle": "मीटिंग में शामिल होने के लिए पासवर्ड दर्ज करें",
"invalidPassword": "अमान्य पासवर्ड",
@@ -475,8 +624,8 @@
"knockTitle": "कोई व्यक्ति बैठक में शामिल होना चाहता है",
"knockingParticipantList": "प्रतिभागी सूची दस्तक",
"nameField": "अपना नाम दर्ज करें",
"notificationLobbyAccessDenied": "{{targetParticipantName}} has been rejected to join by {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} has been allowed to join by {{originParticipantName}}",
"notificationLobbyAccessDenied": "{{targetParticipantName}} को {{originParticipantName}} ने मीटिंग में शामिल होने की अनुमति नहीं दी।",
"notificationLobbyAccessGranted": "{{targetParticipantName}} को {{originParticipantName}} ने मीटिंग में शामिल होने की अनुमति दी।",
"notificationLobbyDisabled": "लॉबी को {{originParticipantName}}द्वारा अक्षम कर दिया गया",
"notificationLobbyEnabled": "लॉबी को {{originParticipantName}}द्वारा सक्षम किया गया",
"notificationTitle": "लॉबी",
@@ -509,9 +658,12 @@
"no": "नहीं",
"participant": "प्रतिभागी",
"participantStats": "प्रतिभागी आँकड़े",
"selectTabTitle": "🎥 रिकॉर्डिंग के लिए कृपया इस टैब को चुनें",
"sessionToken": "सत्र टोकन",
"start": "रिकॉर्डिंग प्रारंभ करें",
"stop": "रिकॉर्डिंग बंद करें",
"stopping": "रिकॉर्डिंग बंद की जा रही है",
"wait": "कृपया प्रतीक्षा करें, आपकी रिकॉर्डिंग सेव की जा रही है",
"yes": "हाँ"
},
"lockRoomPassword": "पासवर्ड",
@@ -522,11 +674,30 @@
},
"me": "मैं",
"notify": {
"OldElectronAPPTitle": "Security vulnerability!",
"OldElectronAPPTitle": "सुरक्षा में खामी",
"allowAll": "सभी की अनुमति दें",
"allowAudio": "ऑडियो की अनुमति दें",
"allowDesktop": "स्क्रीन शेयरिंग की अनुमति दें",
"allowVideo": "वीडियो की अनुमति दें",
"allowedUnmute": "आप माइक्रोफोन अनम्यूट कर सकते हैं, कैमरा चालू कर सकते हैं या स्क्रीन साझा कर सकते हैं।",
"audioUnmuteBlockedDescription": "सिस्टम सीमाओं के कारण माइक्रोफोन अनम्यूट अस्थायी रूप से ब्लॉक कर दिया गया है।",
"audioUnmuteBlockedTitle": "माइक्रोफोन अनम्यूट ब्लॉक!",
"chatMessages": "चैट संदेश",
"connectedOneMember": "{{name}} मीटिंग में शामिल हुए",
"connectedThreePlusMembers": "{{name}} और {{count}} अन्य लोग मीटिंग में शामिल हुए",
"connectedTwoMembers": "{{first}} और {{second}} मीटिंग में शामिल हुआ",
"connectionFailed": "कनेक्शन विफल। कृपया बाद में पुनः प्रयास करें!",
"dataChannelClosed": "वीडियो की गुणवत्ता प्रभावित हो सकती है",
"dataChannelClosedDescription": "ब्रिज चैनल बंद है, इसलिए वीडियो की गुणवत्ता न्यूनतम स्तर तक सीमित हो सकती है।",
"dataChannelClosedDescriptionWithAudio": "ब्रिज चैनल बंद है, इसलिए ऑडियो और वीडियो में व्यवधान हो सकता है।",
"dataChannelClosedWithAudio": "ऑडियो और वीडियो की गुणवत्ता प्रभावित हो सकती है",
"desktopMutedRemotelyTitle": "आपकी स्क्रीन शेयरिंग {{participantDisplayName}} द्वारा रोकी गई है",
"disabledIframe": "एंबेडिंग केवल डेमो उद्देश्यों के लिए है, इसलिए यह कॉल {{timeout}} मिनट में डिस्कनेक्ट हो जाएगी।",
"disabledIframeSecondaryNative": "एंबेडिंग {{domain}} केवल डेमो उद्देश्यों के लिए है, इसलिए यह कॉल {{timeout}} मिनट में डिस्कनेक्ट हो जाएगी।",
"disabledIframeSecondaryWeb": "एंबेडिंग {{domain}} केवल डेमो उद्देश्यों के लिए है, इसलिए यह कॉल {{timeout}} मिनट में डिस्कनेक्ट हो जाएगी। उत्पादन एंबेडिंग के लिए कृपया <a href='{{jaasDomain}}' rel='noopener noreferrer' target='_blank'>Jitsi as a Service</a> का उपयोग करें!",
"disconnected": "डिस्कनेक्ट",
"displayNotifications": "सूचनाएँ दिखाएँ",
"dontRemindMe": "मुझे याद न दिलाएँ",
"focus": "Conference focus",
"focusFail": "{{component}} उपलब्ध नहीं - {{ms}} सेकंड में पुनः प्रयास करें",
"grantedTo": "Moderator rights granted to {{to}}!",
@@ -534,7 +705,29 @@
"invitedThreePlusMembers": "{{name}} और {{count}} अन्य लोगों को आमंत्रित किया गया",
"invitedTwoMembers": "{{first}} और {{second}} को आमंत्रित किया गया",
"kickParticipant": "{{kicked}} को {{kicker}} द्वारा किक किया गया",
"leftOneMember": "{{name}} ने मीटिंग छोड़ दी",
"leftThreePlusMembers": "{{name}} और कई अन्य ने मीटिंग छोड़ दी",
"leftTwoMembers": "{{first}} और {{second}} ने मीटिंग छोड़ दी",
"linkToSalesforce": "Salesforce से लिंक करें",
"linkToSalesforceDescription": "आप मीटिंग सारांश को Salesforce ऑब्जेक्ट से लिंक कर सकते हैं।",
"linkToSalesforceError": "मीटिंग को Salesforce से लिंक करने में विफल",
"linkToSalesforceKey": "इस मीटिंग को लिंक करें",
"linkToSalesforceProgress": "मीटिंग को Salesforce से लिंक किया जा रहा है…",
"linkToSalesforceSuccess": "मीटिंग सफलतापूर्वक Salesforce से लिंक हो गई",
"localRecordingStarted": "{{name}} ने लोकल रिकॉर्डिंग शुरू की।",
"localRecordingStopped": "{{name}} ने लोकल रिकॉर्डिंग बंद की।",
"me": "मैं",
"moderationInEffectCSDescription": "यदि आप अपनी स्क्रीन साझा करना चाहते हैं तो कृपया हाथ उठाएँ।",
"moderationInEffectCSTitle": "स्क्रीन शेयरिंग मॉडरेटर द्वारा ब्लॉक की गई है",
"moderationInEffectDescription": "यदि आप बोलना चाहते हैं तो कृपया हाथ उठाएँ।",
"moderationInEffectTitle": "आपका माइक्रोफोन मॉडरेटर द्वारा म्यूट किया गया है",
"moderationInEffectVideoDescription": "यदि आप अपना कैमरा चालू करना चाहते हैं तो कृपया हाथ उठाएँ।",
"moderationInEffectVideoTitle": "आपका कैमरा मॉडरेटर द्वारा ब्लॉक किया गया है",
"moderationRequestFromModerator": "होस्ट चाहता है कि आप अनम्यूट करें",
"moderationRequestFromParticipant": "बोलना चाहता है",
"moderationStartedTitle": "मॉडरेशन शुरू हो गई",
"moderationStoppedTitle": "मॉडरेशन बंद हो गई",
"moderationToggleDescription": "{{participantDisplayName}} द्वारा",
"moderator": "मॉडरेटर के अधिकार दिए गए!",
"muted": "आपने वार्तालाप को म्यूट करके शुरू किया है।",
"mutedRemotelyDescription": "जब आप बोलने के लिए तैयार हों, तो आप हमेशा अनम्यूट कर सकते हैं। बैठक में शोर कम रखने के लिए बोलने के बाद म्यूट कर दें।",
@@ -543,24 +736,85 @@
"newDeviceAction": "उपयोग करें",
"newDeviceAudioTitle": "नए ऑडियो डिवाइस का पता चला",
"newDeviceCameraTitle": "नए कैमरे का पता चला",
"nextToSpeak": "आप अगली बारी में बोलने वाले हैं",
"noiseSuppressionDesktopAudioDescription": "डेस्कटॉप ऑडियो साझा करते समय अतिरिक्त नॉइज़ सप्रेशन सक्षम नहीं किया जा सकता, कृपया इसे अक्षम करें और पुनः प्रयास करें।",
"noiseSuppressionFailedTitle": "अतिरिक्त नॉइज़ सप्रेशन शुरू करने में विफल",
"noiseSuppressionStereoDescription": "स्टीरियो ऑडियो के साथ अतिरिक्त नॉइज़ सप्रेशन वर्तमान में समर्थित नहीं है।",
"oldElectronClientDescription1": "आप जित्सी मीट क्लाइंट के एक पुराने संस्करण का उपयोग करते हुए दिखाई देते हैं, जिसमे सुरक्षा कमजोरियां ज्ञात हैं।",
"oldElectronClientDescription2": "नवीनतम बिल्ड",
"oldElectronClientDescription3": " अब!",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) किसी अन्य प्रतिभागी द्वारा हटा दिया गया",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) दूसरे प्रतिभागी द्वारा निर्धारित",
"raisedHand": "{{name}} बोलना चाहेंगे।",
"raisedHands": "{{participantName}} और {{raisedHands}} अन्य लोग",
"reactionSounds": "ध्वनि बंद करें",
"reactionSoundsForAll": "सभी के लिए ध्वनि बंद करें",
"screenShareNoAudio": "विंडो चयन स्क्रीन में 'ऑडियो साझा करें' बॉक्स चयनित नहीं था।",
"screenShareNoAudioTitle": "सिस्टम ऑडियो साझा नहीं किया जा सका!",
"screenSharingAudioOnlyDescription": "कृपया ध्यान दें कि अपनी स्क्रीन साझा करने से \"सर्वोत्तम प्रदर्शन\" मोड प्रभावित होगा और आप अधिक बैंडविड्थ का उपयोग करेंगे।",
"screenSharingAudioOnlyTitle": "\"सर्वोत्तम प्रदर्शन\" मोड",
"selfViewTitle": "आप सेटिंग्स से हमेशा सेल्फ-व्यू को अन-हाइड कर",
"somebody": "Somebody",
"startSilentDescription": "ऑडियो सक्षम करने के लिए मीटिंग को फिर से करें",
"startSilentTitle": "आप बिना ऑडियो आउटपुट के साथ शामिल हुए!",
"suboptimalBrowserWarning": "हमें डर है कि आपकी मीटिंग अनुभव यहाँ बहुत अच्छा नहीं होने वाला है। हम इसे सुधारने के तरीके ढूंढ़ रहे हैं, लेकिन उस समय तक कृपया <a href='{{recommendedBrowserPageLink}}' target='_blank'>पूरी तरह से समर्थित ब्राउज़र</a> में से एक का प्रयास करें",
"suboptimalExperienceTitle": "ब्राउज़र चेतावनी",
"suggestRecordingAction": "शुरू करें",
"suggestRecordingDescription": "क्या आप रिकॉर्डिंग शुरू करना चाहेंगे?",
"suggestRecordingTitle": "इस मीटिंग को रिकॉर्ड करें",
"unmute": "अनम्यूट",
"videoMutedRemotelyDescription": "आप इसे हमेशा फिर से चालू कर सकते हैं।",
"videoMutedRemotelyTitle": "आपका कैमरा {{participantDisplayName}}द्वारा अक्षम कर दिया गया है!"
"videoMutedRemotelyTitle": "आपका कैमरा {{participantDisplayName}}द्वारा अक्षम कर दिया गया है!",
"videoUnmuteBlockedDescription": "सिस्टम सीमाओं के कारण कैमरा अनम्यूट और डेस्कटॉप शेयरिंग अस्थायी रूप से ब्लॉक कर दी गई है।",
"videoUnmuteBlockedTitle": "कैमरा अनम्यूट और डेस्कटॉप शेयरिंग ब्लॉक!",
"viewParticipants": "प्रतिभागियों को देखें",
"viewVisitors": "दर्शकों को देखें",
"waitingParticipants": "{{waitingParticipants}} लोग",
"waitingVisitors": "कतार में प्रतीक्षारत दर्शक: {{waitingVisitors}}",
"waitingVisitorsTitle": "मीटिंग अभी लाइव नहीं है!",
"whiteboardLimitDescription": "कृपया अपनी प्रगति सहेजें, क्योंकि उपयोगकर्ता सीमा जल्द ही पहुँच जाएगी और व्हाइटबोर्ड बंद हो जाएगा।",
"whiteboardLimitTitle": "व्हाइटबोर्ड उपयोग"
},
"participantsPane": {
"actions": {
"reject": "स्वीकार"
"admit": "स्वीकृत करें",
"admitAll": "सभी को स्वीकृत करें",
"allow": "नॉन-मॉडरेटर को अनुमति दें:",
"allowDesktop": "स्क्रीन शेयरिंग की अनुमति दें",
"allowVideo": "वीडियो की अनुमति दें",
"askDesktop": "स्क्रीन साझा करने के लिए पूछें",
"askUnmute": "अनम्यूट करने के लिए पूछें",
"audioModeration": "स्वयं अनम्यूट करें",
"blockEveryoneMicCamera": "सभी के माइक्रोफोन और कैमरा ब्लॉक करें",
"breakoutRooms": "ब्रेकआउट रूम",
"desktopModeration": "स्क्रीन शेयरिंग शुरू करें",
"goLive": "लाइव जाएँ",
"invite": "किसी को आमंत्रित करें",
"lowerAllHands": "सभी हाथ नीचे करें",
"lowerHand": "हाथ नीचे करें",
"moreModerationActions": "अधिक मॉडरेशन विकल्प",
"moreModerationControls": "अधिक मॉडरेशन नियंत्रण",
"moreParticipantOptions": "अधिक प्रतिभागी विकल्प",
"mute": "म्यूट करें",
"muteAll": "सभी को म्यूट करें",
"muteEveryoneElse": "बाकी सभी को म्यूट करें",
"reject": "अस्वीकार",
"stopDesktop": "स्क्रीन शेयरिंग बंद करें",
"stopEveryonesDesktop": "सभी की स्क्रीन शेयरिंग बंद करें",
"stopEveryonesVideo": "सभी का वीडियो बंद करें",
"stopVideo": "वीडियो बंद करें",
"unblockEveryoneMicCamera": "सभी के माइक्रोफोन और कैमरा अनब्लॉक करें",
"videoModeration": "उनका वीडियो शुरू करें"
},
"headings": {
"lobby": "लॉबी ({{count}})",
"participantsList": "मीटिंग प्रतिभागी ({{count}})",
"viewerRequests": "दर्शकों के अनुरोध {{count}}",
"visitorInQueue": " (प्रतीक्षा में {{count}})",
"visitorRequests": " (अनुरोध {{count}})",
"visitors": "दर्शक {{count}}",
"visitorsList": "दर्शक ({{count}})",
"waitingLobby": "लॉबी में प्रतीक्षा कर रहे हैं ({{count}})"
}
},
"passwordDigitsOnly": "अधिकतम {{number}} अंक",
@@ -617,6 +871,7 @@
"joinAudioByPhone": "फोन ऑडियो के साथ जुड़ें",
"joinMeeting": "मीटिंग में शामिल हों",
"joinWithoutAudio": "ऑडियो के बिना जुड़ें",
"keyboardShortcuts": "कीबोर्ड शॉर्टकट सक्षम करें",
"linkCopied": "लिंक क्लिपबोर्ड पर कॉपी किया गया",
"lookGood": "ऐसा लगता है कि आपका माइक्रोफ़ोन ठीक से काम कर रहा है",
"or": "या",
@@ -642,9 +897,10 @@
"ringing": "Ringing…"
},
"profile": {
"avatar": "अवतार",
"setDisplayNameLabel": "अपना नाम सेट करें",
"setEmailInput": "ई-मेल दर्ज करें",
"setEmailLabel": "Set अपना ग्रेवार्ट ईमेल सेट करें",
"setEmailLabel": "Gravatar ईमेल",
"title": "प्रोफ़ाइल"
},
"raisedHand": "बोलना चाहेंगे",
@@ -660,8 +916,12 @@
"expandedPending": "रिकॉर्डिंग शुरू की जा रही है…",
"failedToStart": "रिकॉर्डिंग शुरू करने में विफलता हुई।",
"fileSharingdescription": "रिकॉर्डिंग को बैठक प्रतिभागियों के साथ साझा करें",
"limitNotificationDescriptionNative": "उच्च मांग के कारण आपकी रिकॉर्डिंग {{limit}} मिनट तक सीमित रहेगी। असीमित रिकॉर्डिंग के लिए <3>{{app}}</3> आज़माएँ।",
"limitNotificationDescriptionWeb": "उच्च मांग के कारण आपकी रिकॉर्डिंग {{limit}} मिनट तक सीमित रहेगी। असीमित रिकॉर्डिंग के लिए <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> आज़माएँ।",
"highlight": "हाइलाइट",
"highlightMoment": "महत्वपूर्ण क्षण",
"highlightMomentDisabled": "रिकॉर्डिंग शुरू होने पर आप क्षणों को हाइलाइट कर सकते हैं",
"highlightMomentSuccess": "क्षण हाइलाइट किया गया",
"highlightMomentSucessDescription": "आपका हाइलाइट किया गया क्षण मीटिंग सारांश में जोड़ा जाएगा।",
"inProgress": "रिकॉर्डिंग या लाइव स्ट्रीमिंग प्रगति में है",
"live": "लाइव",
"loggedIn": "{{userName}} के रूप में लॉग इन किया गया",
"off": "रिकॉर्डिंग बंद हो गई",
@@ -677,18 +937,26 @@
"signOut": "साइन आउट करें",
"title": "रिकॉर्डिंग",
"unavailable": "ओह! {{serviceName}} वर्तमान में अनुपलब्ध है। हम इस समस्या को हल करने पर काम कर रहे हैं। कृपया बाद में पुनः प्रयास करें।",
"unavailableTitle": "रिकॉर्डिंग उपलब्ध नहीं है"
"unavailableTitle": "रिकॉर्डिंग उपलब्ध नहीं है",
"uploadToCloud": "क्लाउड पर अपलोड करें"
},
"sectionList": {
"pullToRefresh": "रीफ़्रेश करने के लिए नीचे खींचें"
},
"security": {
"about": "आप अपनी मीटिंग में $t(lockRoomPassword) जोड़ सकते हैं। सहभागियों को मीटिंग में शामिल होने से पहले $t(lockRoomPassword) प्रदान करना होगा।",
"aboutReadOnly": "Moderator participants can add a $t(lockRoomPassword) to the meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.",
"aboutReadOnly": "मॉडरेटर मीटिंग में $t(lockRoomPassword) जोड़ सकते हैं। प्रतिभागियों को मीटिंग में शामिल होने से पहले यह $t(lockRoomPassword) प्रदान करना होगा।",
"insecureRoomNameWarning": "कमरे का नाम असुरक्षित है। अनचाहे सहभागियों की कॉन्फ्रेंस में शामिल हो सकते हैं। सुरक्षा बटन का उपयोग करके अपनी मीटिंग को सुरक्षित बनाने का विचार करें। ",
"securityOptions": "Security options"
"title": "सुरक्षा विकल्प",
"unsafeRoomActions": {
"meeting": "सुरक्षा बटन का उपयोग करके अपनी मीटिंग को सुरक्षित करने पर विचार करें।",
"prejoin": "कृपया अधिक विशिष्ट मीटिंग नाम का उपयोग करने पर विचार करें।",
"welcome": "कृपया अधिक विशिष्ट मीटिंग नाम का उपयोग करें या दिए गए सुझावों में से किसी एक को चुनें।"
}
},
"settings": {
"audio": "ऑडियो",
"buttonLabel": "सेटिंग्स",
"calendar": {
"about": "{{appName}} कैलेंडर एकीकरण आपके कैलेंडर तक सुरक्षित रूप से पहुंचने के लिए उपयोग किया जाता है ताकि यह आगामी कार्यक्रम पढ़ सके।",
"disconnect": "डिस्कनेक्ट करें",
@@ -698,23 +966,35 @@
},
"devices": "डिवाइस",
"followMe": "हर कोई मेरा अनुसरण करेगा",
"incomingMessage": "आने वाला संदेश",
"language": "भाषा",
"loggedIn": "{{name}} के रूप में लॉग इन किया",
"maxStageParticipants": "मुख्य स्टेज पर पिन किए जा सकने वाले प्रतिभागियों की अधिकतम संख्या",
"microphones": "माइक्रोफोन",
"moderator": "Moderator",
"more": "More",
"moderator": "होस्ट",
"more": "अधिक",
"name": "नाम",
"noDevice": "कोई नहीं",
"notifications": "सूचना",
"participantJoined": "प्रतिभागी जुड़े",
"participantKnocking": "प्रतिभागी लॉबी में आए",
"participantLeft": "प्रतिभागी बाहर गए",
"playSounds": "ध्वनि चलाएँ",
"reactions": "मीटिंग प्रतिक्रियाएँ",
"sameAsSystem": "सिस्टम के समान ({{label}})",
"selectAudioOutput": "ऑडियो आउटपुट",
"selectCamera": "कैमरा",
"selectMic": "माइक्रोफोन",
"speakers": "Speakers",
"shortcuts": "शॉर्टकट्स",
"speakers": "वक्ता",
"startAudioMuted": "सभी लोग म्यूट से शुरू करेंगे",
"startVideoMuted": "सभी लोग छिपे हुए शुरू करेंगे",
"title": "सेटिंग"
"talkWhileMuted": "म्यूट रहते हुए बोलें",
"title": "सेटिंग",
"video": "वीडियो"
},
"settingsView": {
"advanced": "Advanced",
"advanced": "उन्नत",
"alertCancel": "रद्द करें",
"alertOk": "ओके",
"alertTitle": "चेतावनी",
@@ -830,14 +1110,14 @@
"exitTileView": "टाइल दृश्य से बाहर निकलें",
"feedback": "प्रतिक्रिया छोड़ें",
"hangup": "छोड़ें",
"help": "Help",
"help": "सहायता",
"invite": "लोगों को आमंत्रित करें",
"lobbyButtonDisable": "लॉबी मोड को अक्षम करें",
"lobbyButtonEnable": "लॉबी मोड सक्षम करें",
"login": "लॉग इन",
"logout": "लॉगआउट",
"lowerYourHand": "अपना हाथ नीचे करें",
"moreActions": "More actions",
"moreActions": "अधिक कार्रवाइयाँ",
"moreOptions": "अधिक विकल्प",
"mute": "म्यूट / अनम्यूट",
"muteEveryone": "सभी को म्यूट करें",
@@ -858,19 +1138,21 @@
"security": "सुरक्षा विकल्प",
"selectBackground": "पृष्ठभूमि का चयन करें",
"shareRoom": "किसी को आमंत्रित करें",
"sharedvideo": "एक YouTube वीडियो साझा करें",
"shareaudio": "डियो साझा करें",
"sharedvideo": "एक वीडियो साझा करें",
"shortcuts": "शॉर्टकट देखें",
"speakerStats": "स्पीकर आँकड़े",
"startScreenSharing": "स्क्रीन साझाकरण प्रारंभ करें",
"startSubtitles": "Start subtitles",
"startSubtitles": "सबटाइटल शुरू करें",
"stopScreenSharing": "स्क्रीन शेयरिंग बंद करो",
"stopSharedVideo": "YouTube वीडियो बंद करें",
"stopSharedVideo": "वीडियो बंद करें",
"stopSubtitles": "उपशीर्षक बंद करें",
"talkWhileMutedPopup": "बोलने की कोशिश कर रहा है? आप मौन हैं",
"tileViewToggle": "टॉगल टाइल दृश्य",
"toggleCamera": "कैमरा टॉगल करें",
"videoSettings": "वीडियो सेटिंग्स",
"videomute": "स्टार्ट / स्टॉप कैमरा"
"videomute": "स्टॉप कैमरा",
"videounmute": "स्टार्ट कैमरा"
},
"transcribing": {
"ccButtonTooltip": "सबटाइटल शुरू / बंद करें",
@@ -919,10 +1201,11 @@
"domuteOthers": "सभी को म्यूट करें",
"domuteVideo": "कैमरा अक्षम करें",
"domuteVideoOfOthers": "अन्य सभी के लिए कैमरा बंद करें",
"flip": "Flip",
"grantModerator": "Grant Moderator",
"flip": "उलटना",
"grantModerator": "संचालक बनाएं",
"hideSelfView": "स्वयं का दृश्य छिपाएँ",
"kick": "निकालें",
"moderator": "Moderator",
"moderator": "संचालक",
"mute": "प्रतिभागी मौन है",
"muted": "म्यूटेड",
"remoteControl": "स्टार्ट / स्टॉप रिमोट कंट्रोल",
@@ -958,8 +1241,20 @@
"headerSubtitle": "सुरक्षित और उच्च गुणवत्ता बैठकें",
"headerTitle": "जित्सी मीट",
"info": "डायल-इन जानकारी",
"jitsiOnMobile": "मोबाइल पर Jitsi हमारे एप्लिकेशन डाउनलोड करें और कहीं से भी एक बैठक शुरू करें",
"jitsiOnMobile": "मोबाइल पर जित्सी हमारे एप्लिकेशन डाउनलोड करें और कहीं से भी एक बैठक शुरू करें",
"join": "बनाये / जुड़े ",
"logo": {
"calendar": "कैलेंडर लोगो",
"desktopPreviewThumbnail": "डेस्कटॉप प्रीव्यू थंबनेल",
"googleLogo": "गूगल लोगो",
"logoDeepLinking": "जित्सी मीट लोगो",
"microsoftLogo": "माइक्रोसॉफ्ट लोगो",
"policyLogo": "नीति लोगो"
},
"meetingsAccessibilityLabel": "मीटिंग्स",
"mobileDownLoadLinkAndroid": "एंड्रॉइड के लिए मोबाइल ऐप डाउनलोड करें",
"mobileDownLoadLinkFDroid": "F-Droid के लिए मोबाइल ऐप डाउनलोड करें",
"mobileDownLoadLinkIos": "iOS के लिए मोबाइल ऐप डाउनलोड करें",
"moderatedMessage": "Or <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">book a meeting URL</a> in advance where you are the only moderator.",
"privacy": "गोपनीयता",
"recentList": "हाल का",
@@ -972,6 +1267,13 @@
"sendFeedback": "फ़ीडबैक भेजें",
"startMeeting": "मीटिंग प्रारंभ करें",
"terms": "शर्तें",
"title": "सुरक्षित, पूरी तरह से चित्रित, और पूरी तरह से मुक्त वीडियो कॉन्फ्रेंसिंग"
"title": "सुरक्षित, पूरी तरह से चित्रित, और पूरी तरह से मुक्त वीडियो कॉन्फ्रेंसिंग",
"upcomingMeetings": "आपकी आगामी मीटिंग्स"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "व्हाइटबोर्ड"
},
"screenTitle": "व्हाइटबोर्ड"
}
}

View File

@@ -541,8 +541,6 @@
"googlePrivacyPolicy": "Google politika privatnosti",
"inProgress": "U tijeku je snimanje ili prijenos uživo",
"invalidStreamKey": "Ključ prijenosa uživo možda nije ispravan.",
"limitNotificationDescriptionNative": "Tvoj prijenos će biti ograničen na {{limit}} min. Za neograničeni prijenos isprobaj {{app}}.",
"limitNotificationDescriptionWeb": "Zbog velike potražnje će tvoj prijenos biti ograničen na {{limit}} min. Za neograničeni prijenos isprobaj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Prijenos uživo prekinut",
"offBy": "{{name}} je prekinuo/la prijenos uživo",
"on": "Prijenos uživo pokrenut",
@@ -903,8 +901,6 @@
"highlightMomentSuccess": "Trenutak istaknut",
"highlightMomentSucessDescription": "Tvoj istaknuti trenutak će se dodati u sažetak sastanka.",
"inProgress": "Snimanje ili prijenos uživo u tijeku",
"limitNotificationDescriptionNative": "Zbog velike potražnje, tvoje će snimanje biti ograničeno na {{limit}} min. Za neograničeno snimanje isprobaj <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Zbog velike potražnje, tvoje će snimanje biti ograničeno na {{limit}} min. Za neograničeno snimanje isprobaj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Generirali smo poveznicu za tvoje snimanje.",
"live": "UŽIVO",
"localRecordingNoNotificationWarning": "Snimanje se neće najaviti ostalim sudionicima. Morat ćeš ih obavijestiti da se sastanak snima.",

View File

@@ -531,8 +531,6 @@
"googlePrivacyPolicy": "regule za datowy škit pola Google",
"inProgress": "live-stream startowany",
"invalidStreamKey": "Kluč za live-stream njeje najskerje prawy.",
"limitNotificationDescriptionNative": "Waš stream je na {{limit}} mjeń. wobmjezowany. Za njewobmjezowany streaming wužiwajće prošu {{app}}.",
"limitNotificationDescriptionWeb": "Wysokeje potrjeby dla je Waš stream na {{limit}} mjeń. wobmjezowany. Za njewobmjezowany streaming dźiće prošu na <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "live-stream stopowany",
"offBy": "{{name}} zadźerža live-stream",
"on": "live-stream",
@@ -887,8 +885,6 @@
"highlightMomentSuccess": "markěrowane",
"highlightMomentSucessDescription": "Waš markěrowany wokomik so k zjeću konferency přida.",
"inProgress": "nahrawanje startowane",
"limitNotificationDescriptionNative": " Wulkeje potrjeby dla je Waše nahraće na {{limit}} mjeń. wobmjezowane. Za njewobmjezowane nahraće wužiwajće prošu <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Wulkeje potrjeby dla je Waše nahrawanje na {{limit}} mjeń. wobmjezowane. Za njewobmjezowane nahrawanje wužiwajće prošu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "link na nahrawanje bu kreěrowany",
"live": "LIVE",
"localRecordingWarning": "Kedźbujće na to, aktualny tab za prawe widejo a awdijo wužiwać.",

View File

@@ -631,8 +631,6 @@
"googlePrivacyPolicy": "Kebijakan Privasi Google",
"inProgress": "Perekaman atau siaran langsung sedang berlangsung",
"invalidStreamKey": "Kunci siaran langsung mungkin salah.",
"limitNotificationDescriptionNative": "Pemutaran streaming Anda akan dibatasi menjadi {{limit}} menit. Untuk streaming tanpa batas, coba {{app}}.",
"limitNotificationDescriptionWeb": "Karena permintaan yang tinggi, streaming Anda akan dibatasi menjadi {{limit}} menit. Untuk streaming tanpa batas, coba <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Siaran Langsung berhenti",
"offBy": "{{name}} menghentikan siaran langsung",
"on": "Siaran Langsung dimulai",
@@ -1016,8 +1014,6 @@
"highlightMomentSuccess": "Momen disorot",
"highlightMomentSucessDescription": "Momen yang Anda sorot akan ditambahkan ke ringkasan pertemuan.",
"inProgress": "Rekaman atau siaran langsung sedang berlangsung",
"limitNotificationDescriptionNative": "Karena permintaan tinggi, rekaman Anda akan dibatasi menjadi {{limit}} menit. Untuk rekaman tanpa batas, coba <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Karena permintaan tinggi, rekaman Anda akan dibatasi menjadi {{limit}} menit. Untuk rekaman tanpa batas, coba <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Kami telah menghasilkan tautan untuk rekaman Anda.",
"localRecordingNoNotificationWarning": "Rekaman tidak akan diumumkan kepada peserta lain. Anda perlu memberi tahu mereka bahwa pertemuan direkam.",
"localRecordingNoVideo": "Video tidak direkam",

View File

@@ -622,8 +622,6 @@
"googlePrivacyPolicy": "Meðferð persónuupplýsinga hjá Google",
"inProgress": "Upptaka eða beint streymi í gangi",
"invalidStreamKey": "Lykill fyrir beint streymi gæti verið rangur.",
"limitNotificationDescriptionNative": "Streymið þitt verður takmarkað við {{limit}} mínútur. Fyrir ótakmarkað streymi ættirðu að prófa {{app}}.",
"limitNotificationDescriptionWeb": "Vegna mikils álags verður streymið þitt takmarkað við {{limit}} mínútur. Fyrir ótakmarkað streymi ættirðu að prófa <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Beint streymi stöðvað",
"offBy": "{{name}} stöðvaði beina streymið",
"on": "Beint streymi er hafið",
@@ -997,8 +995,6 @@
"highlightMomentSuccess": "Áherslulitað augnablik",
"highlightMomentSucessDescription": "Áherslulituðum augnablikum mun verða bætt við yfirlit fundarins.",
"inProgress": "Upptaka eða beint streymi í gangi",
"limitNotificationDescriptionNative": "Vegna mikils álags verður upptakan þín takmörkuð við {{limit}} mínútur. Fyrir ótakmarkaðar upptökur ættirðu að prófa <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Vegna mikils álags verður upptakan þín takmörkuð við {{limit}} mínútur. Fyrir ótakmarkaðar upptökur ættirðu að prófa <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Við höfum útbúið tengil á upptökuna þína.",
"localRecordingNoNotificationWarning": "Upptakan verður ekki tilkynnt öðrum þátttakendum. Þú þarft að láta aðra vita að fundurinn sé tekinn upp.",
"localRecordingNoVideo": "Ekki er verið að taka upp myndmerki",

View File

@@ -370,7 +370,7 @@
"kickParticipantTitle": "Espellere questo partecipante?",
"kickSystemTitle": "Oh! Sei stato espulso dalla riunione",
"kickTitle": "Oh! {{participantDisplayName}} ti ha espulso dalla riunione.",
"learnMore": "ulteriori informazioni",
"learnMore": "Ulteriori informazioni",
"linkMeeting": "Collega la riunione",
"linkMeetingTitle": "Collega la riunione a Salesforce",
"liveStreaming": "Diretta",
@@ -441,8 +441,6 @@
"recording": "Registrazione",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossibile durante una diretta.",
"recordingInProgressDescription": "Questa riunione sta venendo registrata e analizzata dall'IA. I tuoi audio e video sono stati disattivati. Riattivandoli, acconsenti ad essere registrato.",
"recordingInProgressDescriptionFirstHalf": "Questa riunione sta venendo registrata e analizzata dall'IA",
"recordingInProgressDescriptionSecondHalf": ". I tuoi audio e video sono stati disattivati. Riattivandoli, acconsenti ad essere registrato.",
"recordingInProgressTitle": "Registrazione in corso",
"rejoinNow": "Ricollegati ora",
"remoteControlAllowedMessage": "{{user}} ha accettato la tua richiesta di controllo remoto!",
@@ -706,8 +704,6 @@
"googlePrivacyPolicy": "Politiche sulla privacy di Google",
"inProgress": "Registrazione o diretta in corso",
"invalidStreamKey": "La chiave della diretta potrebbe non essere corretta.",
"limitNotificationDescriptionNative": "La tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate prova {{app}}.",
"limitNotificationDescriptionWeb": "Data la grossa domanda la tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "La diretta si è interrotta",
"offBy": "{{name}} ha fermato la diretta",
"on": "Diretta avviata",
@@ -1127,8 +1123,6 @@
"highlightMomentSuccess": "Momento evidenziato",
"highlightMomentSucessDescription": "Il tuo momento evidenziato sarà aggiunto al riepilogo della riunione.",
"inProgress": "Registrazione o diretta in corso",
"limitNotificationDescriptionNative": "La tua registrazione sarà limitata a {{limit}} minuti. Per registrazioni illimitate, prova <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Per la grossa domanda la tua registrazione sarà limitata a {{limit}} minuti. Per registrazioni illimitate, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "È stato generato un collegamento alla tua registrazione.",
"localRecordingNoNotificationWarning": "La registrazione non verrà annunciata ai partecipanti. Dovrai dir loro che la riunione viene registrata.",
"localRecordingNoVideo": "Il video non sta venendo registrato",

View File

@@ -505,8 +505,6 @@
"googlePrivacyPolicy": "Google プライバシーポリシー",
"inProgress": "録画またはライブ配信中です",
"invalidStreamKey": "ストリームキーが正しくないようです。",
"limitNotificationDescriptionNative": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。無制限に録画するには<3>{{app}}</3>をお試しください。",
"limitNotificationDescriptionWeb": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。 無制限に録画するには<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>をお試しください。",
"off": "ライブ配信を停止しました",
"offBy": "{{name}} がライブ配信を停止しました",
"on": "ライブ配信を開始しました",
@@ -835,8 +833,6 @@
"highlightMomentSuccess": "ハイライトされました",
"highlightMomentSucessDescription": "ハイライトされた瞬間は議事録に追加されます。",
"inProgress": "録画またはライブ配信中です",
"limitNotificationDescriptionNative": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。無制限に録画するには<3>{{app}}</3>をお試しください。",
"limitNotificationDescriptionWeb": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。 無制限に録画するには<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>をお試しください。",
"linkGenerated": "あなたの録画へのリンクを生成しました。",
"live": "LIVE",
"localRecordingNoNotificationWarning": "この録画は他の参加者に通知されません。このミーティングが録画されていることを他の参加者に伝えてください。",

View File

@@ -480,8 +480,6 @@
"getStreamKeyManually": "Ur nessaweḍ ara ad d-nerr ula d yiwen n usuddem usrid. Ɛreḍ ad d-tawiḍ tasarut-ik·im n usuddem usrid seg Youtube.",
"googlePrivacyPolicy": "Tasertit tabaḍnit n Google",
"invalidStreamKey": "Tasarut n usuddem usrid yezmer mačči d tameɣtut.",
"limitNotificationDescriptionNative": "Asuddem-inek·inem ad yesɛu kan {{limit}} tesdidin. I usuddem war talast ɛreḍ {{app}}.",
"limitNotificationDescriptionWeb": "Seg wakken yegget usuter, asuddem-inek·inem ad yesɛu talast n {{limit}} tesdidin. I usuddem n war tilas, ɛreḍ <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Asuddem usrid yettuḥbes",
"offBy": "{{name}} iseḥbes asuddem usrid",
"on": "Yebda usuddem usrid",
@@ -777,8 +775,6 @@
"expandedPending": "Asekles ha-t-an yebda….",
"failedToStart": "Beddu n usekles ur yeddi ara",
"fileSharingdescription": "Bḍu asekles d yimttekkiyen n temlilit",
"limitNotificationDescriptionNative": "Seg tuget n usuter, asekles-inek·inem ad yesɛu kan {{limit}} tesdidin. I yiseklas war tilas, ɛreḍ <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Seg tuget n usuter, asekles-inek·inem ad yesɛu kan {{limit}} tesdidin. I yiseklas war tilas, ɛreḍ <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Nsirew-d aseɣwen i usekles-inek·inem.",
"live": "SRID",
"loggedIn": "Yekcem s {{userName}}",

View File

@@ -440,9 +440,7 @@
"recentlyUsedObjects": "Жақында пайдаланылған объектілеріңіз",
"recording": "Жазу",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Тікелей эфир белсенді болған кезде мүмкін емес",
"recordingInProgressDescription": "Бұл жиналыс жазылуда және AI{{learnMore}} арқылы талдануда. Сіздің аудио және бейнеңіз өшірілді. Егер дыбысты қосуды таңдасаңыз, жазылуға келісім бересіз.",
"recordingInProgressDescriptionFirstHalf": "Бұл жиналыс жазылуда және AI арқылы талдануда",
"recordingInProgressDescriptionSecondHalf": ". Сіздің аудио және бейнеңіз өшірілді. Егер дыбысты қосуды таңдасаңыз, жазылуға келісім бересіз.",
"recordingInProgressDescription": "Бұл жиналыс жазылуда және AI арқылы талдануда. Сіздің аудио және бейнеңіз өшірілді. Егер дыбысты қосуды таңдасаңыз, жазылуға келісім бересіз.",
"recordingInProgressTitle": "Жазу орындалуда",
"rejoinNow": "Қазір қайта қосылу",
"remoteControlAllowedMessage": "{{user}} қашықтан басқару сұрауыңызды қабылдады!",
@@ -706,8 +704,6 @@
"googlePrivacyPolicy": "Google құпиялылық саясаты",
"inProgress": "Жазу немесе тікелей эфир орындалуда",
"invalidStreamKey": "Тікелей эфир кілті қате болуы мүмкін.",
"limitNotificationDescriptionNative": "Ағыныңыз {{limit}} минутпен шектеледі. Шексіз ағын үшін {{app}} қолданып көріңіз.",
"limitNotificationDescriptionWeb": "Жоғары сұранысқа байланысты ағыныңыз {{limit}} минутпен шектеледі. Шексіз ағын үшін <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> қолданып көріңіз.",
"off": "Тікелей эфир тоқтатылды",
"offBy": "{{name}} тікелей эфирді тоқтатты",
"on": "Тікелей эфир басталды",
@@ -1127,8 +1123,6 @@
"highlightMomentSuccess": "Сәт бөлектенді",
"highlightMomentSucessDescription": "Бөлектенген сәтіңіз жиналыс қорытындысына қосылады.",
"inProgress": "Жазу немесе тікелей эфир орындалуда",
"limitNotificationDescriptionNative": "Жоғары сұранысқа байланысты жазбаңыз {{limit}} минутпен шектеледі. Шексіз жазбалар үшін <3>{{app}}</3> қолданып көріңіз.",
"limitNotificationDescriptionWeb": "Жоғары сұранысқа байланысты жазбаңыз {{limit}} минутпен шектеледі. Шексіз жазбалар үшін <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> қолданып көріңіз.",
"linkGenerated": "Біз жазбаңызға сілтеме жасадық.",
"localRecordingNoNotificationWarning": "Жазба басқа қатысушыларға хабарланбайды. Жиналыс жазылып жатқанын оларға хабарлауыңыз керек.",
"localRecordingNoVideo": "Бейне жазылып жатқан жоқ",

View File

@@ -634,8 +634,6 @@
"googlePrivacyPolicy": "Google 개인 정보 보호 정책",
"inProgress": "녹화 또는 실시간 스트리밍 진행 중",
"invalidStreamKey": "라이브 스트림 키가 잘못되었을 수 있습니다.",
"limitNotificationDescriptionNative": "스트리밍이 {{limit}}분으로 제한됩니다. 무제한 스트리밍을 사용하려면 {{app}}을 시도해 보세요.",
"limitNotificationDescriptionWeb": "수요가 많아 스트리밍이 {{limit}}분으로 제한됩니다. 무제한 스트리밍을 사용하려면 <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>을 시도해 보세요.",
"off": "실시간 스트리밍이 중지됨",
"offBy": "{{name}}님이 실시간 스트리밍을 중지했습니다",
"on": "실시간 스트리밍",
@@ -1036,8 +1034,6 @@
"highlightMomentSuccess": "순간 강조 표시됨",
"highlightMomentSucessDescription": "강조 표시된 순간이 회의 요약에 추가됩니다.",
"inProgress": "녹화 또는 실시간 스트리밍 진행 중",
"limitNotificationDescriptionNative": "수요가 많아 녹화가 {{limit}}분으로 제한됩니다. 무제한 녹화를 사용하려면 {{app}}을 시도해 보세요.",
"limitNotificationDescriptionWeb": "수요가 많아 녹화가 {{limit}}분으로 제한됩니다. 무제한 녹화를 사용하려면 <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>을 시도해 보세요.",
"linkGenerated": "녹화에 대한 링크를 생성했습니다.",
"localRecordingNoNotificationWarning": "녹화가 다른 참가자에게 알리지 않습니다. 회의가 녹화되고 있음을 알려야 합니다.",
"localRecordingNoVideo": "비디오는 녹화되지 않습니다",

View File

@@ -370,7 +370,7 @@
"kickParticipantTitle": "Izraidīt šo dalībnieku?",
"kickSystemTitle": "Ak! Jūs izraidīja no sapulces",
"kickTitle": "Ak! {{participantDisplayName}} izraidīja jūs no sapulces",
"learnMore": "uzzināt vairāk",
"learnMore": "Uzzināt vairāk",
"linkMeeting": "Sasaistīt sapulci",
"linkMeetingTitle": "Sasaistīt sapulci ar Salesforce",
"liveStreaming": "Tiešraides straumēšana",
@@ -441,8 +441,6 @@
"recording": "Ieraksts",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Nav iespējams, kamēr ir aktīva tiešraides straume",
"recordingInProgressDescription": "Šī sapulce tiek ierakstīta. Jūsu audio un video ir izslēgti. Ja izvēlaties ieslēgt skaņu vai video, jūs piekrītat ierakstīšanai.",
"recordingInProgressDescriptionFirstHalf": "Šo sanāksmi ieraksta un analizē mākslīgais intelekts",
"recordingInProgressDescriptionSecondHalf": ". Jūsu audio un video skaņa ir izslēgta. Ja izvēlaties ieslēgt skaņu, jūs piekrītat ierakstīšanai.",
"recordingInProgressTitle": "Notiek ierakstīšana",
"rejoinNow": "Pieslēgties no jauna",
"remoteControlAllowedMessage": "{{user}} apstiprināja jūsu attālās pārvaldības pieprasījumu!",
@@ -706,8 +704,6 @@
"googlePrivacyPolicy": "Google konfidencialitātes politika",
"inProgress": "Notiek ierakstīšana vai tiešraides straumēšana",
"invalidStreamKey": "Izskatās, ka tiešraides atslēga nav pareiza.",
"limitNotificationDescriptionNative": "ūsu straumēšana būs ierobežota līdz {{limit}} min. Lai iegūtu neierobežotu straumēšanu, izmēģiniet {{app}}.",
"limitNotificationDescriptionWeb": "Lielā pieprasījuma dēļ jūsu straumēšana tiks ierobežota līdz {{limit}} min. Lai iegūtu neierobežotu straumēšanu, izmēģiniet <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Tiešraide izslēgta",
"offBy": "{{name}} izslēdza tiešraidi",
"on": "Tiešraide ieslēgta",
@@ -1127,8 +1123,6 @@
"highlightMomentSuccess": "Brīdis izcelts",
"highlightMomentSucessDescription": "Jūsu izceltais brīdis tiks pievienots sapulces kopsavilkumam.",
"inProgress": "Notiek ierakstīšana vai tiešraides straumēšana",
"limitNotificationDescriptionNative": "Lielā pieprasījuma dēļ jūsu ieraksts tiks ierobežots līdz {{limit}} min. Lai iegūtu neierobežotu ierakstu skaitu, izmēģiniet <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Lielā pieprasījuma dēļ jūsu ieraksts tiks ierobežots līdz {{limit}} min. Lai iegūtu neierobežotu ierakstu skaitu, izmēģiniet <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Mēs esam izveidojuši saiti uz jūsu ierakstu.",
"localRecordingNoNotificationWarning": "Ieraksts netiks izziņots citiem dalībniekiem. Jums būs jāpaziņo viņiem, ka sapulce tiek ierakstīta.",
"localRecordingNoVideo": "Video netiek ierakstīts",

View File

@@ -416,8 +416,6 @@
"getStreamKeyManually": "ഞങ്ങൾക്ക് തത്സമയ സ്ട്രീമുകളൊന്നും നേടാനായില്ല. യൂട്യൂബിൽ നിന്ന് നിങ്ങളുടെ തത്സമയ സ്ട്രീം കീ നേടാൻ ശ്രമിക്കുക.",
"googlePrivacyPolicy": "ഗൂഗിൾ സ്വകാര്യതാ നയം",
"invalidStreamKey": "തത്സമയ സ്ട്രീം കീ തെറ്റായിരിക്കാം.",
"limitNotificationDescriptionNative": "നിങ്ങളുടെ സ്ട്രീമിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും.പരിധിയില്ലാത്ത സ്ട്രീമിംഗിനായി ശ്രമിക്കുക {{app}}.",
"limitNotificationDescriptionWeb": "ഉയർന്ന ഡിമാൻഡ് കാരണം നിങ്ങളുടെ സ്ട്രീമിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും. പരിധിയില്ലാത്ത സ്ട്രീമിംഗിനായി ശ്രമിക്കുക <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "തത്സമയ സ്ട്രീമിംഗ് അവസാനിച്ചു",
"offBy": "{{name}} തത്സമയ സ്ട്രീമിംഗ് നിർത്തി",
"on": "തത്സമയ സംപ്രേക്ഷണം",
@@ -640,8 +638,6 @@
"expandedPending": "റെക്കോർഡിംഗ് ആരംഭിച്ചു…",
"failedToStart": "റെക്കോർഡിംഗ് ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു",
"fileSharingdescription": "മീറ്റിംഗ് പങ്കാളികളുമായി റെക്കോർഡിംഗ് പങ്കിടുക",
"limitNotificationDescriptionNative": "ഉയർന്ന ഡിമാൻഡ് കാരണം നിങ്ങളുടെ റെക്കോർഡിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും. പരിധിയില്ലാത്ത റെക്കോർഡിംഗുകൾക്കായി <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "ഉയർന്ന ഡിമാൻഡ് കാരണം നിങ്ങളുടെ റെക്കോർഡിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും. പരിധിയില്ലാത്ത റെക്കോർഡിംഗുകൾക്കായി <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"live": "തത്സമയം",
"loggedIn": "{{userName}} എന്നയാളായി ലോഗിൻ ചെയ്‌തു",
"off": "െക്കോർഡിംഗ് അവസാനിച്ചു",

View File

@@ -566,8 +566,6 @@
"googlePrivacyPolicy": "Google хувийн мэдээлэл хамгаалах дүрэм",
"inProgress": "Шууд дамжуулалтыг бичиж байна",
"invalidStreamKey": "Шууд дамжуулалтын түлхүүрээ шалгана уу.",
"limitNotificationDescriptionNative": "Таны шууд дамжуулалтын хугацаа {{limit}}-аар минутын хязгаарлагдана. Хязгааргүй болгохын тулд {{app}} аппыг ажиллуулж үзнэ үү.",
"limitNotificationDescriptionWeb": "Таны шууд дамжуулалт чанараас хамааран хугацаа Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Шууд дамжуулалт зогссон",
"offBy": "{{name}} шууд дамжуулалтыг зогсоосон",
"on": "Шууд дамжуулалт",
@@ -932,8 +930,6 @@
"highlightMomentSuccess": "Энэ мөчийг онцолсон",
"highlightMomentSucessDescription": "Таны онцолсон мөч уулзалтын хураангуй хэсэгт нэмэгдэнэ.",
"inProgress": "Бичлэг хийх эсвэл шууд дамжуулалт идэвхитэй",
"limitNotificationDescriptionNative": "Бичлэгийн чанараас хамааран таны минут {{limit}}-р хязгаарлагдаж байна. Хязгаарлалтгүй бичлэг хийхийн тулд <3>{{app}}</3> үзээрэй.",
"limitNotificationDescriptionWeb": "Бичлэгийн чанараас хамааран таны минут {{limit}}-р хязгаарлагдаж байна. Хязгаарлалтгүй бичлэг хийхийн тулд <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> ашиглана уу.",
"linkGenerated": "Таны бичлэгийн холбоосыг үүсгэсэн.",
"live": "ШУУД",
"localRecordingNoNotificationWarning": "Бусад оролцогчид бичлэгийн хийх талаар мэдэгдэнэ. Та энэ бичлэгийн талаарх мэдэгдлийг зөвшөөрөх шаардлагатай.",

View File

@@ -635,8 +635,6 @@
"googlePrivacyPolicy": "Googles personvernpolicy",
"inProgress": "Opptak eller direktesending pågår",
"invalidStreamKey": "Strømmenøkkelen kan være feil.",
"limitNotificationDescriptionNative": "Direktesendingen din vil være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.",
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil direktesendingen din være begrenset til {{limit}} min. For ubegrenset strømming, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Direktesending stoppet",
"offBy": "{{name}} stoppet direktesendingen",
"on": "Direktesending startet",
@@ -1037,8 +1035,6 @@
"highlightMomentSuccess": "Øyeblikk markert",
"highlightMomentSucessDescription": "Det markerte øyeblikket vil bli lagt til møtereferatet.",
"inProgress": "Opptak eller direktesending pågår",
"limitNotificationDescriptionNative": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Vi har generert en lenke til opptaket ditt.",
"localRecordingNoNotificationWarning": "Opptaket vil ikke bli annonsert til de andre deltakerne. Du må informere dem om at møtet blir tatt opp.",
"localRecordingNoVideo": "Video blir ikke tatt opp",

View File

@@ -1,7 +1,7 @@
{
"addPeople": {
"accessibilityLabel": {
"meetingLink": "Meeting link: {{url}}"
"meetingLink": "Meeting-link: {{url}}"
},
"add": "Uitnodigen",
"addContacts": "Nodig uw contacten uit",
@@ -126,7 +126,7 @@
"messagebox": "Typ een bericht",
"newMessages": "Nieuwe berichten",
"nickname": {
"featureChat": "chat",
"featureChat": "gesprek",
"featureClosedCaptions": "ondertiteling",
"featureFileSharing": "bestandsdeling",
"featurePolls": "peilingen",
@@ -373,9 +373,9 @@
"kickParticipantTitle": "Deze deelnemer verwijderen?",
"kickSystemTitle": "Oei! U bent uit de vergadering verwijderd",
"kickTitle": "Oei! {{participantDisplayName}} heeft u uit de vergadering verwijderd",
"learnMore": "meer informatie",
"learnMore": "Meer informatie",
"linkMeeting": "Vergadering koppelen",
"linkMeetingTitle": "Vergadering koppelen aan Verkoop",
"linkMeetingTitle": "Vergadering koppelen aan Salesforce",
"liveStreaming": "Livestreamen",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Niet mogelijk tijdens opnemen",
"localUserControls": "Lokale gebruikerscontrole",
@@ -383,6 +383,8 @@
"lockRoom": "$t(lockRoomPassword) voor vergadering toevoegen",
"lockTitle": "Vergrendelen is mislukt",
"login": "Inloggen",
"loginFailed": "Inloggen is mislukt.",
"loginOnResume": "Uw authenticatiesessie is verlopen. U moet opnieuw inloggen om de vergadering voort te zetten.",
"loginQuestion": "Weet u zeker dat u wilt inloggen en de conferentie verlaten?",
"logoutQuestion": "Weet u zeker dat u zich wilt afmelden en de conferentie wilt stoppen?",
"logoutTitle": "Afmelden",
@@ -443,9 +445,7 @@
"recentlyUsedObjects": "Uw recent gebruikte objecten",
"recording": "Opname",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Niet mogelijk tijdens een livestream",
"recordingInProgressDescription": "Deze bijeenkomst wordt opgenomen en geanalyseerd door AI{{learnMore}}. Uw audio en video zijn gedempt. Als u ervoor kiest om de demping op te heffen, stemt u ermee in dat u wordt opgenomen.",
"recordingInProgressDescriptionFirstHalf": "Deze bijeenkomst wordt opgenomen en geanalyseerd door AI",
"recordingInProgressDescriptionSecondHalf": ". Uw audio en video zijn gedempt. Als u ervoor kiest om de demping op te heffen, stemt u ermee in dat u wordt opgenomen.",
"recordingInProgressDescription": "Deze bijeenkomst wordt opgenomen en geanalyseerd door AI. Uw audio en video zijn gedempt. Als u ervoor kiest om de demping op te heffen, stemt u ermee in dat u wordt opgenomen.",
"recordingInProgressTitle": "Opname loopt",
"rejoinNow": "Nu opnieuw deelnemen",
"remoteControlAllowedMessage": "{{user}} heeft uw verzoek om extern beheer geaccepteerd.",
@@ -468,7 +468,7 @@
"screenSharingFailed": "Oeps! Er is iets misgegaan, de schermdeling kon niet worden gestart!",
"screenSharingFailedTitle": "Schermdeling mislukt!",
"screenSharingPermissionDeniedError": "Oeps! Er is iets misgegaan met uw toegangsrechten voor schermdeling. Herlaad en probeer opnieuw.",
"searchInSalesforce": "Zoeken bij Verkoop",
"searchInSalesforce": "Zoeken in Salesforce",
"searchResults": "Zoekresultaten({{count}})",
"searchResultsDetailsError": "Er ging iets mis bij het ophalen van eigenaargegevens.",
"searchResultsError": "Er ging iets mis bij het ophalen van gegevens",
@@ -504,7 +504,7 @@
"sharedVideoDialogError": "Fout: Ongeldige of verboden URL",
"sharedVideoLinkPlaceholder": "YouTube-link of directe video-link",
"show": "Weergeven",
"start": "Start ",
"start": "Starten ",
"startLiveStreaming": "Livestream starten",
"startRecording": "Opname starten",
"startRemoteControlErrorMessage": "Er is een fout opgetreden tijdens het starten van de sessie van extern beheer.",
@@ -592,6 +592,7 @@
"newFileNotification": "{{ participantName }} deelde '{{ fileName }}'",
"removeFile": "Verwijderen",
"removeFileSuccess": "Bestand met succes verwijderd",
"uploadDisabled": "Bestanden uploaden is niet toegestaan. Vraag een moderator om toestemming voor die handeling.",
"uploadFailedDescription": "Probeer het nog eens.",
"uploadFailedTitle": "Upload is mislukt",
"uploadFile": "Bestand delen"
@@ -709,8 +710,6 @@
"googlePrivacyPolicy": "Privacybeleid Google",
"inProgress": "Opname of livestreaming gaande",
"invalidStreamKey": "Livestream-sleutel is mogelijk onjuist.",
"limitNotificationDescriptionNative": "Uw stream zal beperkt worden tot {{limit}} min. Voor ongelimiteerd streamen, probeer {{app}}.",
"limitNotificationDescriptionWeb": "Vanwege een grote vraag zal uw stream beperkt worden tot {{limit}} min. Voor ongelimiteerd streamen, probeer <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Livestream gestopt",
"offBy": "{{name}} heeft de livestream gestopt.",
"on": "Livestream",
@@ -731,7 +730,7 @@
},
"lobby": {
"backToKnockModeButton": "Vraag om deel te mogen nemen",
"chat": "Chat",
"chat": "Gesprek",
"dialogTitle": "Wachtruimte-modus",
"disableDialogContent": "Wachtruimte-modus is momenteel ingeschakeld. Deze functie zorgt ervoor dat ongewenste deelnemers niet aan uw vergadering kunnen deelnemen. Wilt u het uitschakelen?",
"disableDialogSubmit": "Uitschakelen",
@@ -847,12 +846,12 @@
"leftOneMember": "{{name}} heeft de vergadering verlaten",
"leftThreePlusMembers": "{{name}} en vele anderen hebben de vergadering verlaten",
"leftTwoMembers": "{{first}} en {{second}} hebben de vergadering verlaten",
"linkToSalesforce": "Koppelen aan Verkoop",
"linkToSalesforceDescription": "U kunt de samenvatting van de vergadering koppelen aan een Verkoop-object.",
"linkToSalesforceError": "Koppelen aan Verkoop is mislukt",
"linkToSalesforce": "Koppelen aan Salesforce",
"linkToSalesforceDescription": "U kunt de samenvatting van de vergadering koppelen aan een Salesforce-object.",
"linkToSalesforceError": "Koppelen aan Salesforce is mislukt",
"linkToSalesforceKey": "Deze vergadering koppelen",
"linkToSalesforceProgress": "Vergadering koppelen aan Verkoop…",
"linkToSalesforceSuccess": "De vergadering is gekoppeld aan Verkoop",
"linkToSalesforceProgress": "Vergadering koppelen aan Salesforce…",
"linkToSalesforceSuccess": "De vergadering is gekoppeld aan Salesforce",
"localRecordingStarted": "{{name}} heeft een lokale opname gestart.",
"localRecordingStopped": "{{name}} heeft een lokale opname gestopt.",
"me": "Ik",
@@ -888,7 +887,7 @@
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) verwijderd door een andere deelnemer",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) ingesteld door een ander deelnemer",
"raiseHandAction": "Hand opsteken",
"raisedHand": "Wilgraag deelnemen.",
"raisedHand": "Wil graag deelnemen.",
"raisedHands": "{{participantName}} en {{raisedHands}} meer mensen",
"reactionSounds": "Geluiden uitschakelen",
"reactionSoundsForAll": "Geluiden uitschakelen voor iedereen",
@@ -1096,15 +1095,15 @@
"setEmailLabel": "Gravatar e-mailadres",
"title": "Profiel"
},
"raisedHand": "Zou graag willen spreken",
"raisedHand": "Wil graag spreken",
"raisedHandsLabel": "Aantal handen omhoog",
"record": {
"already": {
"linked": "De vergadering is al gekoppeld aan dit Verkoop-object."
"linked": "De vergadering is al gekoppeld aan dit Salesforce-object."
},
"type": {
"account": "Account",
"contact": "Contact",
"contact": "Contactpersoon",
"lead": "Potentiële klant",
"opportunity": "Kans",
"owner": "Eigenaar"
@@ -1130,8 +1129,6 @@
"highlightMomentSuccess": "Moment gemarkeerd",
"highlightMomentSucessDescription": "Uw gemarkeerde moment wordt toegevoegd aan de samenvatting van de vergadering.",
"inProgress": "Opname of live streaming in uitvoering",
"limitNotificationDescriptionNative": "Vanwege een grote vraag wordt uw opname beperkt tot {{limit}} min. Voor ongelimiteerde opnamen, probeer <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Vanwege een grote vraag wordt uw opname beperkt tot {{limit}} min. Voor ongelimiteerde opnamen, probeer <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Wij hebben een link naar uw opname gegenereerd.",
"localRecordingNoNotificationWarning": "De opname wordt niet aan andere deelnemers bekendgemaakt. U moet hen laten weten dat de vergadering is opgenomen.",
"localRecordingNoVideo": "Video wordt niet opgenomen",
@@ -1276,7 +1273,7 @@
"displayEmotions": "Emoties weergeven",
"fearful": "Angstig",
"happy": "Blij",
"hours": "{{count}}h",
"hours": "{{count}}u",
"labelTooltip": "Aantal deelnemers: {{count}}",
"minutes": "{{count}}m",
"name": "Naam",
@@ -1347,7 +1344,7 @@
"laugh": "Lachen",
"leaveConference": "Vergadering verlaten",
"like": "Duim omhoog",
"linkToSalesforce": "Koppelen met Verkoop",
"linkToSalesforce": "Koppelen aan Salesforce",
"lobbyButton": "Wachtruimte in- of uitschakelen",
"localRecording": "Besturingselementen voor lokale opname in- of uitschakelen",
"lockRoom": "Wachtwoord voor vergadering in- of uitschakelen",
@@ -1454,7 +1451,7 @@
"leaveBreakoutRoom": "Aparte vergaderruimte verlaten",
"leaveConference": "Vergadering verlaten",
"like": "Duim omhoog",
"linkToSalesforce": "Koppelen aan Verkoop",
"linkToSalesforce": "Koppelen aan Salesforce",
"lobbyButtonDisable": "Wachtruimte uitschakelen",
"lobbyButtonEnable": "Wachtruimte inschakelen",
"login": "Aanmelden",
@@ -1630,30 +1627,30 @@
"chatIndicator": "(toeschouwer)",
"joinMeeting": {
"description": "U bent momenteel een toeschouwer bij deze conferentie.",
"raiseHand": "Raise your hand",
"title": "Joining meeting",
"wishToSpeak": "If you wish to speak, please raise your hand below and wait for the moderator's approval."
"raiseHand": "Hand opsteken",
"title": "Deelnemen aan vergadering",
"wishToSpeak": "Als u wilt spreken, steek dan hieronder uw hand op en wacht op goedkeuring van de moderator."
},
"labelTooltip": "Number of viewers: {{count}}",
"labelTooltip": "Aantal toeschouwers: {{count}}",
"notification": {
"demoteDescription": "Sent here by {{actor}}, raise your hand to participate",
"noMainParticipantsDescription": "A participant needs to start the meeting. Please try again in a bit.",
"noMainParticipantsTitle": "This meeting hasn't started yet.",
"noVisitorLobby": "You cannot join while there is a lobby enabled for the meeting.",
"notAllowedPromotion": "A participant needs to allow your request first.",
"requestToJoin": "Hand Raised",
"requestToJoinDescription": "Your request was sent to the moderators. Hang tight!",
"title": "You are a viewer in the meeting"
"demoteDescription": "Hierheen gestuurd door {{actor}}, steek uw hand op om deel te nemen",
"noMainParticipantsDescription": "Een deelnemer moet de vergadering starten. Probeer het over een tijdje opnieuw.",
"noMainParticipantsTitle": "Deze vergadering is nog niet begonnen.",
"noVisitorLobby": "U kunt niet deelnemen terwijl er een wachtruimte is ingeschakeld voor de vergadering.",
"notAllowedPromotion": "Een deelnemer moet eerst uw verzoek toestaan.",
"requestToJoin": "Hand opgestoken",
"requestToJoinDescription": "Uw verzoek is naar de moderators gestuurd. Even geduld!",
"title": "U bent een toeschouwer in de vergadering"
},
"waitingMessage": "You'll join the meeting as soon as it is live!"
"waitingMessage": "U zult deelnemen aan de vergadering zodra deze live is!"
},
"volumeSlider": "Volume slider",
"volumeSlider": "Volume-schuifknop",
"welcomepage": {
"accessibilityLabel": {
"join": "Tik om deel te nemen",
"roomname": "Voer naam van ruimte in"
},
"addMeetingName": "Add Meeting name",
"addMeetingName": "Geef de vergadering een naam",
"appDescription": "U kunt nu videochatten met het gehele team. Nodig uit wie u maar wilt. {{app}} is een volledig versleutelde, 100% open-source oplossing voor videovergaderingen, die u wanneer u maar wilt gratis kunt gebruiken — zonder dat u een account nodig hebt.",
"audioVideoSwitch": {
"audio": "Spraak",
@@ -1673,16 +1670,16 @@
"join": "AANMAKEN / DEELNEMEN",
"logo": {
"calendar": "Agenda logo",
"desktopPreviewThumbnail": "Desktop preview thumbnail",
"desktopPreviewThumbnail": "Bureaubladvoorbeeld miniatuur",
"googleLogo": "Google logo",
"logoDeepLinking": "Jitsi meet logo",
"microsoftLogo": "Microsoft logo",
"policyLogo": "Policy logo"
},
"meetingsAccessibilityLabel": "Meetings",
"mobileDownLoadLinkAndroid": "Download mobile app for Android",
"mobileDownLoadLinkFDroid": "Download mobile app for F-Droid",
"mobileDownLoadLinkIos": "Download mobile app for iOS",
"meetingsAccessibilityLabel": "Vergaderingen",
"mobileDownLoadLinkAndroid": "Download mobiele app voor Android",
"mobileDownLoadLinkFDroid": "Download mobiele app voor F-Droid",
"mobileDownLoadLinkIos": "Download mobiele app voor iOS",
"moderatedMessage": "Of <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">boek een vergadering URL</a> van tevoren waar u de enige moderator bent.",
"privacy": "Privacy",
"recentList": "Recent",

View File

@@ -635,8 +635,6 @@
"googlePrivacyPolicy": "Googles personvernpolicy",
"inProgress": "Opptak eller direktesending pågår",
"invalidStreamKey": "Strømmenøkkelen kan være feil.",
"limitNotificationDescriptionNative": "Direktesendingen din vil være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.",
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil direktesendingen din være begrenset til {{limit}} min. For ubegrenset strømming, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Direktesending stoppet",
"offBy": "{{name}} stoppet direktesendingen",
"on": "Direktesending startet",
@@ -1037,8 +1035,6 @@
"highlightMomentSuccess": "Øyeblikk markert",
"highlightMomentSucessDescription": "Det markerte øyeblikket vil bli lagt til møtereferatet.",
"inProgress": "Opptak eller direktesending pågår",
"limitNotificationDescriptionNative": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Vi har generert en lenke til opptaket ditt.",
"localRecordingNoNotificationWarning": "Opptaket vil ikke bli annonsert til de andre deltakerne. Du må informere dem om at møtet blir tatt opp.",
"localRecordingNoVideo": "Video blir ikke tatt opp",

View File

@@ -635,8 +635,6 @@
"googlePrivacyPolicy": "Politica de confidencialitat de Google",
"inProgress": "Enregistrament o difusion en dirècte en cors",
"invalidStreamKey": "La clau de difusion en dirècte es benlèu pas corrècta.",
"limitNotificationDescriptionNative": "Vòstra difusion serà limitada a {{limit}} min. Per de difusions illimitada ensajatz {{app}}.",
"limitNotificationDescriptionWeb": "A causa d'una brava demanda vòstra difusion serà limitada a {{limit}} min. Per de difusion illimitada ensajatz <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "La difusion en dirècte es estada arrestada",
"offBy": "{{name}} a arrestat la difusion en dirècte",
"on": "Difusion en dirècte",
@@ -1037,8 +1035,6 @@
"highlightMomentSuccess": "Moments destacats",
"highlightMomentSucessDescription": "Vòstre moment suslinhat serà apondut al resumit de la reünion.",
"inProgress": "Enregistrament o difusion en dirècte en cors",
"limitNotificationDescriptionNative": "A causa duna demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per denregistraments sens limit ensajatz <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "A causa duna demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per denregistraments sens limit ensajatz <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Avèm generat un ligam pel vòstre enregistrament.",
"localRecordingNoNotificationWarning": "L'enregistrament s'anonciarà pas als autres participants. Los deuretz informar que la reünion serà enregistrada.",
"localRecordingNoVideo": "La vidèo es pas enregistrada actualament",

View File

@@ -566,8 +566,6 @@
"googlePrivacyPolicy": "Polityka prywatności Google",
"inProgress": "Trwa nagrywanie lub transmisja na żywo",
"invalidStreamKey": "Klucz transmisji na żywo może być nieprawidłowy.",
"limitNotificationDescriptionNative": "Twoje strumieniowanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj {{app}}.",
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje strumieniowanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Transmitowanie na żywo zostało zatrzymane",
"offBy": "{{name}} zatrzymał transmisję na żywo",
"on": "Strumień live",
@@ -935,8 +933,6 @@
"highlightMomentSuccess": "Zaznaczony moment",
"highlightMomentSucessDescription": "Zaznaczony moment zostanie dodany do podsumowania spotkania.",
"inProgress": "Trwa nagrywanie lub transmisja na żywo",
"limitNotificationDescriptionNative": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Wygenerowano link do nagrania.",
"live": "NA ŻYWO",
"localRecordingNoNotificationWarning": "Nagranie nie zostanie ogłoszone innym uczestnikom. Musisz poinformować ich, że spotkanie jest nagrywane.",

View File

@@ -622,8 +622,6 @@
"googlePrivacyPolicy": "Política de Privacidade do Google",
"inProgress": "Gravação ou live streaming em andamento",
"invalidStreamKey": "A senha para transmissão ao vivo pode estar incorreta.",
"limitNotificationDescriptionNative": "Sua transmissão será limitada a {{limit}} minutos. Para transmissão ilimitada tente {{app}}.",
"limitNotificationDescriptionWeb": "Devido a alta demanda sua transmissão será limitada a {{limit}} minutos. Para transmissão ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Transmissão ao vivo encerrada",
"offBy": "{{name}} parou a transmissão ao vivo",
"on": "Transmissão ao Vivo",
@@ -996,8 +994,6 @@
"highlightMomentSuccess": "Momento destacado",
"highlightMomentSucessDescription": "Seu momento destacado será adicionado ao sumário da reunião.",
"inProgress": "Gravação ou live streaming em andamento",
"limitNotificationDescriptionNative": "Devido a demanda, sua gravação ficará limitada a {{limit}} minutos. Para gravação ilimitada tente <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Devido a demanda, sua gravação ficará limitada a {{limit}} minutos. Para gravação ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Geramos um link para sua gravação.",
"live": "AO VIVO",
"localRecordingNoNotificationWarning": "A gravação não será anunciada aos outros participantes. Você precisará avisá-los que a reunião está sendo gravada.",

View File

@@ -370,7 +370,7 @@
"kickParticipantTitle": "Expulsar este participante?",
"kickSystemTitle": "Ai! Foste expulso da reunião.",
"kickTitle": "Ai! {{participantDisplayName}} expulsou-o da reunião",
"learnMore": "saiba mais",
"learnMore": "Saiba mais",
"linkMeeting": "Link da reunião",
"linkMeetingTitle": "Link da reunião à Força de Vendas",
"liveStreaming": "Transmissão em direto",
@@ -440,9 +440,7 @@
"recentlyUsedObjects": "Os seus objetos recentemente utilizados",
"recording": "A gravar",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Não possível enquanto a transmissão em direto estiver activa",
"recordingInProgressDescription": "Esta reunião está a ser gravada e analisada pela IA{{learnMore}}. O seu áudio e vídeo foram silenciados. Se optar por ativar o som, concorda em ser gravado.",
"recordingInProgressDescriptionFirstHalf": "Esta reunião está a ser gravada e analisada por IA.",
"recordingInProgressDescriptionSecondHalf": ". Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
"recordingInProgressDescription": "Esta reunião está a ser gravada e analisada pela IA. O seu áudio e vídeo foram silenciados. Se optar por ativar o som, concorda em ser gravado.",
"recordingInProgressTitle": "Gravação em andamento",
"rejoinNow": "Reingressar agora",
"remoteControlAllowedMessage": "{{user}} aceitou o seu pedido de controlo remoto!",
@@ -706,8 +704,6 @@
"googlePrivacyPolicy": "Política de Privacidade do Google",
"inProgress": "Gravação ou transmissão em direto em curso",
"invalidStreamKey": "A senha para transmissão em direto pode estar incorreta.",
"limitNotificationDescriptionNative": "A sua transmissão será limitada a {{limit}} min. Para uma tentativa de streaming ilimitada tente {{app}}.",
"limitNotificationDescriptionWeb": "Devido à grande procura, a sua transmissão será limitada a {{limit}} min. Para uma tentativa de streaming ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Transmissão em direto encerrada",
"offBy": "{{name}} parou a transmissão em direto",
"on": "Iniciada a transmissão em direto",
@@ -1127,8 +1123,6 @@
"highlightMomentSuccess": "Momento destacado",
"highlightMomentSucessDescription": "O seu momento destacado será acrescentado ao resumo da reunião.",
"inProgress": "Gravação ou transmissão em direto em curso",
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. Para gravações ilimitadas tente <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Devido à grande procura, a sua gravação será limitada a {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Gerámos um link para a sua gravação.",
"localRecordingNoNotificationWarning": "A gravação não será anunciada aos outros participantes. Será necessário avisá-los de que a reunião está gravada.",
"localRecordingNoVideo": "O vídeo não está a ser gravado",

View File

@@ -628,8 +628,6 @@
"googlePrivacyPolicy": "Политика конфиденциальности Google",
"inProgress": "Идет запись или прямая трансляция",
"invalidStreamKey": "Похоже ключ прямой трансляции неверен.",
"limitNotificationDescriptionNative": "Ваша трансляция будет ограничена {{limit}} мин. Для неограниченного просмотра попробуйте {{app}}.",
"limitNotificationDescriptionWeb": "Из-за высокой нагрузки ваша потоковая передача будет ограничена {{limit}} мин. Для неограниченной потоковой передачи попробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
"off": "Трансляция остановлена",
"offBy": "{{name}} остановил прямую трансляцию",
"on": "Трансляция",
@@ -1011,8 +1009,6 @@
"highlightMomentSuccess": "Моменты выделены",
"highlightMomentSucessDescription": "Ваши выделенные моменты будут добавлены в итоги встречи.",
"inProgress": "Идет запись или прямая трансляция",
"limitNotificationDescriptionNative": "Из-за высокой нагрузки ваша запись будет ограничена {{limit}} мин. Для неограниченного количества записей попробуйте <3> {{app}} </3>.",
"limitNotificationDescriptionWeb": "Из-за высокой нагрузки ваша запись будет ограничена {{limit}} мин. Для неограниченного количества записей попробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Мы создали ссылку на вашу запись.",
"localRecordingNoNotificationWarning": "Запись не будет объявлена другим участникам. Вам необходимо самостоятельно уведомить их о том, что встреча записывается.",
"localRecordingNoVideo": "Видео не записывается",

View File

@@ -360,7 +360,7 @@
"kickParticipantTitle": "Cheres bogare custa persone?",
"kickSystemTitle": "Ohia, t'ant bogadu dae s'addòbiu",
"kickTitle": "Ohi! {{participantDisplayName}} t'at bogadu de sa riunione",
"learnMore": "àteras informatziones",
"learnMore": "Àteras informatziones",
"linkMeeting": "Acàpia sa riunione",
"linkMeetingTitle": "Acàpia sa riunione a Salesforce",
"liveStreaming": "Trasmissione in direta",
@@ -430,9 +430,7 @@
"recentlyUsedObjects": "Ogetos impreados de reghente",
"recording": "Registrende",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossìbile in su mentras chi sa trasmissione in direta est ativa",
"recordingInProgressDescription": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA{{learnMore}}. S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.",
"recordingInProgressDescriptionFirstHalf": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA",
"recordingInProgressDescriptionSecondHalf": ". S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.",
"recordingInProgressDescription": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA. S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.",
"recordingInProgressTitle": "Registratzione in cursu",
"rejoinNow": "Torra a intrare",
"remoteControlAllowedMessage": "{{user}} at atzetadu sa rechesta tua de controllu remotu.",
@@ -693,8 +691,6 @@
"googlePrivacyPolicy": "Polìtica de riservadesa de Google",
"inProgress": "Registratzione o trasmissione in direta in cursu",
"invalidStreamKey": "Sa crae pro is trasmissiones in direta podet èssere iscurreta.",
"limitNotificationDescriptionNative": "Sa trasmissione in direta tua at a èssere limitada a {{limit}} minutos. Pro una trasmissione sena lìmites, imprea {{app}}.",
"limitNotificationDescriptionWeb": "A càusa de s'arta dimanda, sa trasmissione in direta tua at a èssere limitada a {{limit}} minutos. Pro una trasmissione sena lìmites, imprea <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Trasmissione in direta firmada",
"offBy": "{{name}} at firmadu sa trasmissione in direta",
"on": "Trasmissione in direta aviada",
@@ -1111,8 +1107,6 @@
"highlightMomentSuccess": "Momentu in evidèntzia",
"highlightMomentSucessDescription": "Su momentu chi as postu in evidèntzia at a èssere agiuntu a su resumu de sa riunione.",
"inProgress": "Registratzione o trasmissione in direta in cursu",
"limitNotificationDescriptionNative": "A càusa de s'arta dimanda, sa registratzione tua at a èssere limitada a {{limit}} minutos. Pro una registratzione sena lìmites, imprea <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "A càusa de s'arta dimanda, sa registratzione tua at a èssere limitada a {{limit}} minutos. Pro registrare sena lìmites, imprea <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Amus generadu unu ligòngiu a sa registratzione tua.",
"localRecordingNoNotificationWarning": "Sa registratzione no at a èssere annuntziada a is partetzipantes. Si dd'as a dèpere fàghere iscire tue.",
"localRecordingNoVideo": "Su vìdeu no s'est registrende.",

View File

@@ -418,8 +418,6 @@
"getStreamKeyManually": "Nepodarilo sa získať žiadne živé vysielania. Skúste získať kľúč pre živé vysielanie z YouTube.",
"googlePrivacyPolicy": "Pravidlá ochrany súkromia Google",
"invalidStreamKey": "Kľúč pre živé vysielanie je nesprávny.",
"limitNotificationDescriptionNative": "Živé vysielanie je obmedzené na {{limit}} minút. Pre neobmedzené vysielanie skúste {{app}}.",
"limitNotificationDescriptionWeb": "Živé vysielanie je obmedzené na {{limit}} minút. Pre neobmedzené vysielanie skúste <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Živé vysielanie ukončené",
"offBy": "{{name}} ukončil živé vysielanie",
"on": "Živé vysielanie",
@@ -620,8 +618,6 @@
"expandedPending": "Začína sa nahrávanie…",
"failedToStart": "Nepodarilo sa začať nahrávanie",
"fileSharingdescription": "Nahrávku zdielať s účastníkmi stretnutia",
"limitNotificationDescriptionNative": "Nahrávanie je obmedzené na {{limit}} minút. Pre neobmedzené nahrávanie skúste <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Nahrávanie je obmedzené na {{limit}} minút. Pre neobmedzené nahrávanie skúste <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"live": "LIVE",
"loggedIn": "Prihlásený ako {{userName}}",
"off": "Nahrávanie zastavené",

View File

@@ -480,8 +480,6 @@
"getStreamKeyManually": "Ni bilo mogoče najti prenosov v živo. Poskusite pridobiti ključ za prenos v živo iz YouTuba.",
"googlePrivacyPolicy": "Politika zasebnosti Google",
"invalidStreamKey": "Ključ prenosa v živo je morda napačen.",
"limitNotificationDescriptionNative": "Vaš prenos v živo bo omejen na {{limit}} min. Za neomejen prenos preizkusite {{app}}.",
"limitNotificationDescriptionWeb": "Zaradi velikega povpraševanja bo vaš prenos omejen na {{limit}} min. Za neomejen prenos preizkusite <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Prenos v živo zaustavljen",
"offBy": "Uporabnik {{name}} je prekinil prenos v živo",
"on": "Prenos v živo",
@@ -778,8 +776,6 @@
"expandedPending": "Snemanje se začenja…",
"failedToStart": "Snemanja ni bilo mogoče začeti",
"fileSharingdescription": "Delite snemanje z udeleženci srečanja",
"limitNotificationDescriptionNative": "Zaradi velikega povpraševanja bo snemanje omejeno na {{limit}} min. Za neomejeno snemanje preizkusite <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Zaradi velikega povpraševanja bo snemanje omejeno na {limit}} min. Za neomejeno snemanje preizkusite <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Ustvarili smo povezava do posnetka.",
"live": "V ŽIVO",
"loggedIn": "Vpisan kot {{userName}}",

View File

@@ -73,7 +73,7 @@
"hideParticipantList": "Fshihe listën e pjesëmarrësve",
"mainRoom": "Dhoma kryesore",
"notifications": {
"joined": "Po hyhet te dhomë aneks konsultimesh \"{{name}}\"",
"joined": "Po hyhet te dhomë aneks konsultimesh {{name}}",
"joinedMainRoom": "Po hyhet te dhoma kryesore",
"joinedTitle": "Dhoma Aneks Konsultimesh"
},
@@ -109,9 +109,15 @@
}
},
"chat": {
"enter": "Hyni në fjalosje",
"disabled": "Dërgimi i mesazheve të fjalosjes është çaktivizuar.",
"enter": "Hyni në dhomë",
"error": "Gabim: mesazhi juaj su dërgua. Arsye: {{error}}",
"fieldPlaceHolder": "Shtypni këtu mesazhin tuaj",
"everyone": "Gjithkush",
"fieldPlaceHolder": "Aa",
"fileAccessibleTitle": "{{user}} ngarkoi një kartelë",
"fileAccessibleTitleMe": "me ngarkoi një kartelë",
"fileDeleted": "U fshi një kartelë",
"guestsChatIndicator": "(guest)",
"lobbyChatMessageTo": "Mesazh fjalosjeje në holl për {{recipient}}",
"message": "Mesazh",
"messageAccessibleTitle": "{{user}} thotë:",
@@ -120,9 +126,20 @@
"messagebox": "Shtypni një mesazh",
"newMessages": "Mesazhe të rinj",
"nickname": {
"featureChat": "fjalosje",
"featureClosedCaptions": "titra të mbyllur",
"featureFileSharing": "dhënie kartelash",
"featurePolls": "pyetësorë",
"popover": "Zgjidhni një nofkë",
"title": "Që të përdorni fjalosjen, jepni një nofkë",
"titleWithPolls": "Që të përdorni fjalosjen dhe pyetësorë, jepni një nofkë"
"titleWith1Features": "Që të përdorni {{feature1}}, jepni një nofkë",
"titleWith2Features": "Që të përdorni {{feature1}} dhe {{feature2}}, jepni një nofkë",
"titleWith3Features": "Që të përdorni {{feature1}}, {{feature2}} dhe {{feature3}}, jepni një nofkë",
"titleWith4Features": "Që të përdorni {{feature1}}, {{feature2}}, {{feature3}} dhe {{feature4}}, jepni një nofkë",
"titleWithCC": "Që të përdorni fjalosje dhe titra të mbyllur, jepni një nofkë",
"titleWithPolls": "Që të përdorni fjalosjen dhe pyetësorë, jepni një nofkë",
"titleWithPollsAndCC": "Që të përdorni fjalosje, pyetësorë dhe titra të mbyllur, jepni një nofkë",
"titleWithPollsAndCCAndFileSharing": "Që të përdorni fjalosje, pyetësorë, titra të mbyllur dhe kartela, jepni një nofkë"
},
"noMessagesMessage": "Te takimi ska ende mesazhe. Nisni një bisedë këtu!",
"privateNotice": "Mesazh privat për {{recipient}}",
@@ -131,18 +148,27 @@
"systemDisplayName": "Sistem",
"tabs": {
"chat": "Fjalosje",
"closedCaptions": "CC",
"fileSharing": "Kartela",
"polls": "Pyetësorë"
},
"title": "Fjalosje",
"titleWithPolls": "Fjalosje dhe Pyetësorë",
"titleWithCC": "CC",
"titleWithFeatures": "Bisedoni dhe",
"titleWithFileSharing": "Kartela",
"titleWithPolls": "Pyetësorë",
"you": "ju"
},
"chromeExtensionBanner": {
"buttonText": "Instaloni Zgjerimin për Chrome",
"buttonTextEdge": "Instaloni Zgjerimin Edge",
"buttonTextEdge": "Instaloni Zgjerimin për Edge",
"close": "Mbylle",
"dontShowAgain": "Mos ma shfaq sërish këtë",
"installExtensionText": "Instaloni zgjerimin për integrim Google Calendar-it dhe Office 365-s"
"installExtensionText": "Instaloni zgjerimin për integrim me Google Calendar dhe Office 365"
},
"closedCaptionsTab": {
"emptyState": "Lënda e titrave të mbyllur do të jetë e përdorshme sapo një moderator ti fillojë ato",
"startClosedCaptionsButton": "Nis titra të mbyllur"
},
"connectingOverlay": {
"joiningRoom": "Po ju lidhim me takimin tuaj…"
@@ -201,6 +227,9 @@
"video_ssrc": "Video SSRC:",
"yes": "po"
},
"customPanel": {
"close": "Mbylle"
},
"dateUtils": {
"earlier": "Më herët",
"today": "Sot",
@@ -223,7 +252,7 @@
"noDesktopApp": "Se keni aplikacionin?",
"noMobileApp": "Se keni aplikacionin?",
"or": "OR",
"termsAndConditions": "Duke vazhduar, pajtoheni me <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a> tona",
"termsAndConditions": "Duke vazhduar, pajtoheni me <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terma & kushte.</a>",
"title": "Po niset takimi juaj në {{app}}…",
"titleNew": "Po niset takimi juaj…",
"tryAgainButton": "Riprovoni në desktop",
@@ -263,7 +292,8 @@
"Remove": "Hiqe",
"Share": "Ndaje",
"Submit": "Parashtroje",
"WaitForHostMsg": "Konferenca ska nisur, ngaqë ska mbërritur ende ndonjë moderator. Nëse dëshironi të bëheni një moderator, ju lutemi, bëni hyrjen. Përndryshe, ju lutemi, pritni.",
"Understand": "E kuptoj, mbamëni të heshtuar për tani",
"UnderstandAndUnmute": "E kuptoj, ju lutem, hiqmani heshtimin",
"WaitForHostNoAuthMsg": "Konferenca ska nisur, ngaqë ska mbërritur ende ndonjë moderator. Përndryshe, ju lutemi, pritni.",
"WaitingForHostButton": "Prit për moderator",
"WaitingForHostTitle": "Po pritet për një moderator…",
@@ -285,6 +315,12 @@
"alreadySharedVideoTitle": "Lejohet vetëm një ndarje videoje me të tjerët në herë",
"applicationWindow": "Dritare aplikacioni",
"authenticationRequired": "Lypset mirëfilltësim",
"cameraCaptureDialog": {
"description": "Bëni dhe dërgoni një foto duke përdorur kamerën e celularit tuaj",
"ok": "Hape kamerën",
"reject": "Jo tani",
"title": "Bëni një foto"
},
"cameraConstraintFailedError": "Kamera juaj splotëson disa nga kufizimet e domosdoshme.",
"cameraNotFoundError": "Su gjet kamera.",
"cameraNotSendingData": "Sqemë në gjendje të përdornim kamerën tuaj. Ju lutemi, kontrolloni se mos pajisjen po e përdor një tjetër aplikacion, përzgjidhni pajisje tjetër që nga menuja e rregullimeve, ose provoni të ringarkoni aplikacionin.",
@@ -299,6 +335,7 @@
"conferenceReloadMsg": "Po provojmë ta ndreqim këtë gjë. Rilidhje pas {{seconds}} sekondash…",
"conferenceReloadTitle": "Mjerisht, diç shkoi ters.",
"confirm": "Ripohojeni",
"confirmBack": "Mbrapsht",
"confirmNo": "Jo",
"confirmYes": "Po",
"connectError": "Hëm! Diç shkoi ters dhe smundëm të lidhemi dot me konferencën.",
@@ -308,7 +345,7 @@
"copied": "U kopjua",
"copy": "Kopjoje",
"demoteParticipantDialog": "Jeni i sigurt se doni ta kaloni këtë pjesëmarrës si vizitor?",
"demoteParticipantTitle": "Kaloje si vizitor",
"demoteParticipantTitle": "Kaloje si parës",
"dismiss": "Hidhe tej",
"displayNameRequired": "Njatjeta! Cili është emri juaj?",
"done": "U bë",
@@ -334,16 +371,20 @@
"kickParticipantButton": "Përzëre",
"kickParticipantDialog": "Jeni i sigurt se doni të përzihet ky pjesëmarrës?",
"kickParticipantTitle": "Të përzihet ky pjesëmarrës?",
"kickSystemTitle": "Ooh! U përzutë nga takimi",
"kickTitle": "Ooh! {{participantDisplayName}} ju përzuri nga takimi",
"learnMore": "Mësoni më tepër",
"linkMeeting": "Lidheni takimin",
"linkMeetingTitle": "Lidheni takimin me Salesforce",
"liveStreaming": "Transmetim i Drejtpërdrejtë",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Jo e mundshme, kur është aktiv regjistrimi",
"localUserControls": "Kontrolle vendore përdoruesi",
"lockMessage": "Su arrit të kyçej konferenca.",
"lockRoom": "Shtoni takim $t(lockRoomPasswordUppercase)",
"lockRoom": "Shtoni takim $t(lockRoomPassword)",
"lockTitle": "Kyçja dështoi",
"login": "Hyrje",
"loginFailed": "Hyrja dështoi.",
"loginOnResume": "Sesioni juaj me mirëfilltësim ka skaduar. Lypset të bëni sërish hyrjen, që të vazhdoni takimin.",
"loginQuestion": "Jeni i sigurt se doni të hyhet dhe të braktiset konferenca?",
"logoutQuestion": "Jeni i sigurt se doni të dilet dhe të braktiset konferenca?",
"logoutTitle": "Dalje",
@@ -356,23 +397,35 @@
"micPermissionDeniedError": "Skeni akorduar leje për tu përdorur mikrofoni juaj. Mundeni prapëseprapë të merrni pjesë te konferenca, por të tjerët sdo tju dëgjojnë. Përdorni butonin e kamerës, te shtylla e adresave, për ta ndrequr këtë gjë.",
"micTimeoutError": "Su nis dot burim audio. Ndodhi mbarim kohe!",
"micUnknownError": "Spërdoret dot mikrofoni, për një arsye të panjohur.",
"moderationAudioLabel": "Lejoji pjesëmarrësit të heqin heshtimin e vetes",
"moderationVideoLabel": "Lejoji pjesëmarrësit të nisin videon e tyre",
"moderationAudioLabel": "Lejoji jo-moderatorët të heqin heshtimin e vetes",
"moderationDesktopLabel": "Lejoji jo-moderatorët të ndajnë me të tjerët ekranin e tyre",
"moderationVideoLabel": "Lejoji jo-moderatorët të nisin videon e tyre",
"muteEveryoneDialog": "Pjesëmarrësit mund të heqin kurdo heshtimin e veten.",
"muteEveryoneDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo kërkesë për të folur.",
"muteEveryoneElseDialog": "Po i heshtuat, sdo të jeni në gjendje tu hiqni heshtimin, por ata munden të heqin kurdo heshtimin për veten.",
"muteEveryoneElseTitle": "Të heshtohet gjithkush, hiq {{whom}}?",
"muteEveryoneElsesDesktopDialog": "Pasi ndarja me të tjerë të jetë ndalur, sdo të jeni në gjendje ta rinisni, por ata mund ta bëjnë në çfarëdo kohe.",
"muteEveryoneElsesDesktopTitle": "Të ndalet për gjithkënd ndarja e ekranit, hiq {{whom}}?",
"muteEveryoneElsesVideoDialog": "Pasi të jetë çaktivizuar kamera, sdo të jeni në gjendje ta riaktivizoni, por ata munden ta riaktivizojnë kurdo.",
"muteEveryoneElsesVideoTitle": "Të ndalet videoja e gjithkujt, hiq {{whom}}?",
"muteEveryoneSelf": "ju",
"muteEveryoneStartMuted": "Tani e tutje, gjithkush fillon i heshtuar",
"muteEveryoneTitle": "Të heshtohet gjithkush?",
"muteEveryonesDesktopDialog": "Pjesëmarrësit mund të ndajnë me të tjerët ekranin e tyre kurdo.",
"muteEveryonesDesktopDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo një kërkesë për ndarjen e ekranit të tyre.",
"muteEveryonesDesktopTitle": "Të ndalet ndarja e ekranit për gjithkënd?",
"muteEveryonesVideoDialog": "Pjesëmarrësit mund të aktivizojnë videon e tyre kurdo.",
"muteEveryonesVideoDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo kërkesë për aktivizimin e videos së tyre.",
"muteEveryonesVideoDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo një kërkesë për aktivizuar videon e tyre.",
"muteEveryonesVideoDialogOk": "Çaktivizoje",
"muteEveryonesVideoTitle": "Të ndalet videoja e gjithkujt?",
"muteParticipantBody": "Sdo jeni në gjendje të hiqni heshtimin për ta, por ata munden kurdo ta heqin për veten.",
"muteParticipantButton": "Heshtoje",
"muteParticipantsDesktopBody": "Sdo të jeni në gjendje të nisni ndarjen e ekranit të tyre me të tjerë, por ata munden kurdo t ta bëjnë.",
"muteParticipantsDesktopBodyModerationOn": "Sdo të jeni në gjendje të nisni tregimin e ekrani t të tyre dhe as ata sdo të jenë në gjendje.",
"muteParticipantsDesktopButton": "Ndale tregimin e ekranit",
"muteParticipantsDesktopDialog": "Jeni i sigurt se doni të çaktivizoni tregimin e ekranit të këtij pjesëmarrësi? Sdo të jeni në gjendje ta rinisni, por ai mund të bëjë kurdo.",
"muteParticipantsDesktopDialogModerationOn": "Jeni i sigurt se doni të çaktivizoni tregimin e ekranit të këtij pjesëmarrësi? Sdo të jeni në gjendje ta rinisni dhe as ata sdo të jenë në gjendje.",
"muteParticipantsDesktopTitle": "Të çaktivizohet tregim ekrani i këtij pjesëmarrësit?",
"muteParticipantsVideoBody": "Sdo të jeni në gjendje të riaktivizoni kamerën e tyre, por ata munden kurdo ta riaktivizojnë për veten.",
"muteParticipantsVideoBodyModerationOn": "Sdo të jeni në gjendje të riaktivizoni kamerën e tyre dhe as ata sdo të munden.",
"muteParticipantsVideoButton": "Ndale videon",
@@ -391,7 +444,9 @@
"readMore": "më tepër",
"recentlyUsedObjects": "Së fundi përdorët objekte",
"recording": "Regjistrim",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Jo i mundshëm kur ka aktiv një transmetim të drejtpërdrejtë",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Jo i mundshëm, kur ka aktiv një transmetim të drejtpërdrejtë",
"recordingInProgressDescription": "Ky takim po regjistrohet dhe analizohet nga IA. Audioja dhe videoja juaj janë heshtuar. Nëse zgjidhni të hiqet heshtimi, pranimi juaj po regjistrohet.",
"recordingInProgressTitle": "Regjistrim në kryerje e sipër",
"rejoinNow": "Rihyni tani",
"remoteControlAllowedMessage": "{{user}} pranoi kërkesën tuaj për kontroll së largëti!",
"remoteControlDeniedMessage": "{{user}} hodhi poshtë kërkesën tuaj për kontroll së largëti!",
@@ -428,7 +483,7 @@
"sessTerminatedReason": "Takimi u përfundua",
"sessionRestarted": "Thirrja rinisi për shkak të një problemi lidhjeje.",
"shareAudio": "Vazhdoni",
"shareAudioAltText": "që të ndani me të tjerë lëndën e dëshiruar, kaloni te \"Skedë Shfletuesi\", përzgjidhni lëndën, aktivizoni shenjën për \"ndani audio me të tjerë\" dhe mandej klikoni butonin \"ndaje me të tjerë\"",
"shareAudioAltText": "që të ndani me të tjerë lëndën e dëshiruar, kaloni te Skedë Shfletuesi, përzgjidhni lëndën, aktivizoni shenjën për ndani audio me të tjerë dhe mandej klikoni butonin ndaje me të tjerë",
"shareAudioTitle": "Si të ndahet audio me të tjerë",
"shareAudioWarningD1": "lypset të ndalni tregim ekrani, para se të ndani audion tuaj me të tjerë.",
"shareAudioWarningD2": "lypset të rinisni tregimin e ekranit tuaj dhe ti vini shenjë mundësisë “ndani audio me të tjerë”.",
@@ -481,6 +536,7 @@
"tokenAuthFailedWithReasons": "Na ndjeni, nuk keni leje të merrni pjesë në këtë thirrje. Arsye e mundshme: {{reason}}",
"tokenAuthUnsupported": "Nuk mbulohet URL token-i.",
"transcribing": "Transkriptim",
"unauthenticatedAccessDisabled": "Kjo thirrje lyp mirëfilltësim. Ju lutemi, bëni hyrjen, që të mund të vazhdoni.",
"unlockRoom": "Hiq $t(lockRoomPassword) takimi",
"user": "Përdorues",
"userIdentifier": "Identifikues përdoruesi",
@@ -493,10 +549,10 @@
"viewUpgradeOptions": "Shihni mundësi përmirësimi",
"viewUpgradeOptionsContent": "Që të përfitoni përdorim të pakufizuar veçorish me pagesë, të tilla si regjistrimi, transkriptime, RTMP Streaming & etj, duhet të përmirësoni planin tuaj.",
"viewUpgradeOptionsTitle": "Zbuluat një veçori me pagesë!",
"whiteboardLimitContent": "Na ndjeni, është mbërritur te kufiri i tabelave të njëkohshme.",
"whiteboardLimitContent": "Na ndjeni, është mbërritur kufi përdorues të njëkohshëm tabele.",
"whiteboardLimitReference": "Për më tepër hollësi, ju lutemi, vizitoni",
"whiteboardLimitReferenceUrl": "sajtin tonë",
"whiteboardLimitTitle": "Kufizim përdorimi tabele",
"whiteboardLimitTitle": "Përdorim tabele i kufizuar",
"yourEntireScreen": "Krejt ekranin tuaj"
},
"documentSharing": {
@@ -521,6 +577,26 @@
"veryBad": "Shumë i Dobët",
"veryGood": "Shumë i Mirë"
},
"fileSharing": {
"downloadFailedDescription": "Ju lutemi, riprovoni.",
"downloadFailedTitle": "Shkarkimi dështoi",
"downloadFile": "Shkarkoje",
"downloadStarted": "Filloi shkarkimi i kartelës",
"dragAndDrop": "Tërhiqni dhe lini kartela këtu, ose kudo në ekran",
"fileAlreadyUploaded": "Kartela është ngarkuar tashmë te ky takim.",
"fileRemovedByOther": "Kartela juaj '{{ fileName }}' u hoq",
"fileTooLargeDescription": "Ju lutemi, siguroni që kartela të mos tejkalojë {{ maxFileSize }}.",
"fileTooLargeTitle": "Kartela e përzgjedhur është shumë e madhe",
"fileUploadProgress": "Ecuri ngarkimi kartele",
"fileUploadedSuccessfully": "Kartela u ngarkua me sukses",
"newFileNotification": "{{ participantName }} ndau '{{ fileName }}' me të tjerë",
"removeFile": "Hiqe",
"removeFileSuccess": "Kartela u hoq me sukses",
"uploadDisabled": "Slejoheni të ngarkoni kartela. Kërkojini një moderatori të drejta lejimi të këtij veprimi.",
"uploadFailedDescription": "Ju lutemi, riprovoni.",
"uploadFailedTitle": "Ngarkimi dështoi",
"uploadFile": "Ndani kartelë"
},
"filmstrip": {
"accessibilityLabel": {
"heading": "Miniatura videosh"
@@ -627,15 +703,13 @@
"errorAPI": "Ndodhi një gabim teksa hyhej te transmetimet tuaja YouTube. Ju lutemi, provoni të ribëni hyrjen.",
"errorLiveStreamNotEnabled": "Transmetimi i Drejtpërdrejtë sështë i aktivizuar për {{email}}. Ju lutemi, aktivizoni transmetim të drejtpërdrejtë, ose hyni në një llogari me transmetim të drejtpërdrejtë të aktivizuar.",
"expandedOff": "Transmetimi i drejtpërdrejtë u ndal",
"expandedOn": "Takimi po transmetohet aktualisht në YouTube.",
"expandedOn": "Takimi aktualisht po transmetohet drejtpërdrejt",
"expandedPending": "Po fillohet transmetim i drejtpërdrejtë…",
"failedToStart": "Su arrit të fillohej Transmetim i Drejtpërdrejtë",
"getStreamKeyManually": "Sqemë në gjendje të sillnim ndonjë transmetim të drejtpërdrejtë. Provoni të merrni kyçin tuaj për transmetim të drejtpërdrejtë nga YouTube-i.",
"googlePrivacyPolicy": "Rregulla Privatësie Google",
"inProgress": "Regjistrim ose transmetim i drejtpërdrejtë në punë e sipër",
"invalidStreamKey": "Kyçi për transmetim të drejtpërdrejtë mund të jetë i pasaktë.",
"limitNotificationDescriptionNative": "Transmetimi juaj do të kufizohet në {{limit}} min. Për transmetim të pakufizuar, provoni {{app}}.",
"limitNotificationDescriptionWeb": "Për shkak kërkesash të shumta, transmetimi juaj do të kufizohet në {{limit}} min. Për transmetim të pakufizuar, provoni <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Transmetimi i Drejtpërdrejtë u ndal",
"offBy": "{{name}} ndali transmetimin e drejtpërdrejtë",
"on": "Filloi Transmetimi i Drejtpërdrejtë",
@@ -689,7 +763,8 @@
"notificationTitle": "Holl",
"passwordJoinButton": "Hyni",
"title": "Holl",
"toggleLabel": "Aktivizoni hollin"
"toggleLabel": "Aktivizoni hollin",
"waitForModerator": "Konferenca ska nisur ende, ngaqë ska mbërritur ndonjë moderator. Nëse do të donit të bëheni një moderator, ju lutemi, bëni hyrjen në llogari. Përndryshe, ju lutemi, prisni."
},
"localRecording": {
"clientState": {
@@ -732,21 +807,26 @@
"me": "unë",
"notify": {
"OldElectronAPPTitle": "Cenueshmëri sigurie!",
"allowAction": "Lejoje",
"allowAll": "Lejo Gjithçka",
"allowAudio": "Lejo Audio",
"allowDesktop": "Lejo tregim ekrani",
"allowVideo": "Lejo Video",
"allowedUnmute": "Mund të hiqni heshtimin e mikrofonit tuaj, të nisni kamerën tuaj ose të tregoni ekranin tuaj.",
"audioUnmuteBlockedDescription": "Veprimi i heqjes së heshtimit të mikrofonit është bllokuar përkohësisht për shkak kufizimesh të sistemit.",
"audioUnmuteBlockedTitle": "Heqje heshtimi mikrofoni e bllokuar!",
"chatMessages": "Mesazhe fjalosjeje",
"connectedOneMember": "{{name}} nisi takimin",
"connectedThreePlusMembers": "{{name}} dhe mjaft të tjerë tjerë hynë në takim",
"connectedThreePlusMembers": "{{name}} dhe mjaft të tjerë hynë në takim",
"connectedTwoMembers": "{{first}} dhe {{second}} tjetër hynë në takim",
"connectionFailed": "Lidhja dështoi. Ju lutemi, riprovoni më vonë!",
"dataChannelClosed": "Cilësia e videos mund të jetë dëmtuar",
"dataChannelClosedDescription": "Kanali urë u shkëput, kështu që cilësia e videos është kufizuar te vlera më e ulët.",
"dataChannelClosedDescriptionWithAudio": "Kanali urë është jashtë funksionimi, prandaj mund të ndodhin shkëputje te audioja dhe videoja.",
"dataChannelClosedWithAudio": "Cilësia e audios dhe videos mund të jetë dëmtuar",
"desktopMutedRemotelyTitle": "Tregimi i ekranit tuaj është ndalur nga {{participantDisplayName}}",
"disabledIframe": "Trupëzimi është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash.",
"disabledIframeSecondary": "Trupëzimi i {{domain}} është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash. Ju lutemi, për trupëzime të njëmendta përdorni <a href='{{jaasDomain}}' rel='noopener noreferrer' target='_blank'>Jitsi as a Service</a>!",
"disabledIframeSecondaryNative": "Trupëzimi i {{domain}} është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash.",
"disabledIframeSecondaryWeb": "Trupëzimi i {{domain}} është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash. Ju lutemi, për trupëzime të njëmendta përdorni <a href='{{jaasDomain}}' rel='noopener noreferrer' target='_blank'>Jitsi si një Shërbim</a>!",
"disconnected": "u shkëput",
"displayNotifications": "Shfaq njoftime për",
"dontRemindMe": "Mos ma kujto",
@@ -754,7 +834,7 @@
"focusFail": "{{component}} jo i passhëm - riprovoni pas {{ms}} sekondash",
"gifsMenu": "GIPHY",
"groupTitle": "Njoftime",
"hostAskedUnmute": "Moderatori do të donte të flisnit",
"hostAskedUnmute": "Moderatori do të donte të merrnit pjesë.",
"invalidTenant": "Qiramarrës i pavlefshëm",
"invalidTenantHyphenDescription": "Qiramarrësi që po përdorni është i pavlefshëm (fillon, ose përfundon me '-').",
"invalidTenantLengthDescription": "Qiramarrësi që po përdorni është shumë i gjatë.",
@@ -789,30 +869,31 @@
"moderator": "Tani jeni moderator",
"muted": "E keni filluar bisedën të heshtur.",
"mutedRemotelyDescription": "Mundeni përherë të hiqni heshtimin, kur të jeni gati për të folur. Ribëni heshtimin, kur të mbaroni, për të mbajtur zhurmat jashtë takimit.",
"mutedRemotelyTitle": "Jeni heshtuar nga {{moderator}}",
"mutedRemotelyTitle": "Jeni heshtuar nga {{participantDisplayName}}",
"mutedTitle": "U heshtuat!",
"newDeviceAction": "Përdore",
"newDeviceAudioTitle": "U pikas pajisje audio e re",
"newDeviceCameraTitle": "U pikas kamerë e re",
"nextToSpeak": "Jeni pasuesi në radhë për folje",
"noiseSuppressionDesktopAudioDescription": "Mbytja e zhurmave smund të aktivizohet teksa ndahet me të tjerët audioja e desktopit, ju lutemi, çaktivizojeni dhe riprovoni.",
"noiseSuppressionFailedTitle": "Su arrit të nisej mbytja e zhurmave",
"noiseSuppressionStereoDescription": "Aktualisht nuk mbulohet mbytje zhurmash audioje stereo.",
"noiseSuppressionDesktopAudioDescription": "Mbytja e zhurmave ekstra smund të aktivizohet teksa ndahet me të tjerët audioja e desktopit, ju lutemi, çaktivizojeni dhe riprovoni.",
"noiseSuppressionFailedTitle": "Su arrit të nisej mbytja e zhurmave ekstra",
"noiseSuppressionStereoDescription": "Aktualisht nuk mbulohet mbytje zhurmash ekstra me audio stereo.",
"oldElectronClientDescription1": "Duket se përdorni një version të vjetër të klientit Jitsi Meet, i cili ka cenueshmëri të ditura sigurie. Ju lutemi, siguroni përditësimin me ",
"oldElectronClientDescription2": "montimin tonë më të ri",
"oldElectronClientDescription3": " që tani!",
"openChat": "Hapni fjalosjen",
"participantWantsToJoin": "Dëshiron të hyjë në takim",
"participantsWantToJoin": "Dëshirojnë të hyjnë në takim",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) u hoq nga një tjetër pjesëmarrës",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) u caktua nga një tjetër pjesëmarrës",
"raiseHandAction": "Ngrini dorën",
"raisedHand": "Do të donte të fliste.",
"raisedHand": "Do të donte të merrte pjesë.",
"raisedHands": "{{participantName}} dhe {{raisedHands}} persona të tjerë",
"reactionSounds": "Çaktivizo tingujt",
"reactionSoundsForAll": "Çaktivizoji tingujt për të tërë",
"screenShareNoAudio": "Kutizës për ndarje audioje me të tjerë si është vënë shenjë te skena e përzgjedhjes së dritares.",
"screenShareNoAudioTitle": "Su nda dot me të tjerë audioja e sistemit!",
"screenSharingAudioOnlyDescription": "Ju lutemi, kini parasysh se duke dhënë ekranin tuaj, ndikoni te mënyra “Punimi më i mirë” dhe do të përdorni më tepër gjerësi bande",
"screenSharingAudioOnlyDescription": "Ju lutemi, kini parasysh se duke dhënë ekranin tuaj, ndikoni te mënyra “Punimi më i mirë” dhe do të përdorni më tepër gjerësi bande.",
"screenSharingAudioOnlyTitle": "Mënyra “”Punimi më i mirë",
"selfViewTitle": "Mundeni përherë të hiqni fshehjen e pamjes së vetes, që nga rregullimet",
"somebody": "Dikush",
@@ -823,16 +904,18 @@
"suggestRecordingAction": "Niseni",
"suggestRecordingDescription": "Do të donit të nisej një regjistrim?",
"suggestRecordingTitle": "Regjistroje këtë takim",
"unmute": "Çheshtoje",
"unmute": "Çheshtoje Audion",
"unmuteScreen": "Fillo tregim ekrani",
"unmuteVideo": "Hiqe Heshtimin e Videos",
"videoMutedRemotelyDescription": "Mundeni përherë ta rihapni.",
"videoMutedRemotelyTitle": "Videoja juaj u mbyll nga {{moderator}}",
"videoMutedRemotelyTitle": "Videoja juaj u mbyll nga {{participantDisplayName}}",
"videoUnmuteBlockedDescription": "Heqja e heshtimit të kamerës dhe veprimi i tregimit të desktopit janë bllokuar përkohësisht për shkak kufizimesh të sistemit.",
"videoUnmuteBlockedTitle": "Heqja e heshtimit të kamerës dhe tregimi i desktopit janë bllokuar!",
"viewLobby": "Shihni hollin",
"viewParticipants": "Shihni pjesëmarrësit",
"viewVisitors": "Shihni vizitorët",
"waitingParticipants": "{{waitingParticipants}} vetë",
"waitingVisitors": "Vizitorë që presin në radhë: {{waitingVisitors}}",
"waitingVisitors": "Pas që presin në radhë: {{waitingVisitors}}",
"waitingVisitorsTitle": "Takimi ska filluar endeThe meeting is not live yet!",
"whiteboardLimitDescription": "Ju lutemi, ruani çkeni bërë, ngaqë së shpejti do të mbërrihet në kufi përdoruesi dhe tabela do të mbyllet.",
"whiteboardLimitTitle": "Përdorim tabele"
@@ -840,39 +923,47 @@
"participantsPane": {
"actions": {
"admit": "Pranoje",
"admitAll": "Pranoji të tërë",
"allow": "Lejoju pjesëmarsve:",
"allowVideo": "Çaktivizoni videon",
"askUnmute": "Kërkoni heqje heshtimi",
"audioModeration": "Heqin heshtim të vetes",
"blockEveryoneMicCamera": "Bllokoni mikrofonin dhe kamerën e gjithkujt",
"admitAll": "Admit all",
"allow": "Lejoju jo-moderatorëve:",
"allowDesktop": "Të lejojnë tregim ekranesh",
"allowVideo": "Të lejojnë video",
"askDesktop": "Të lejojnë tregim ekrani",
"askUnmute": "Të kërkojnë çheshtim",
"audioModeration": "Të heqin heshtim të vetes",
"blockEveryoneMicCamera": "Të bllokojnë mikrofonin dhe kamerën e kujtdo",
"breakoutRooms": "Dhoma anekse konsultimesh",
"desktopModeration": "Të nisin tregim ekrani",
"goLive": "Go live",
"invite": "Ftoni Dikë",
"lowerAllHands": "Uli krejt duart",
"lowerHand": "Uleni dorën",
"invite": "Të ftojnë dikë",
"lowerAllHands": "Të ulin krejt duart",
"lowerHand": "Të ulin dorën",
"moreModerationActions": "Më tepër mundësi moderimi",
"moreModerationControls": "Më tepër kontrolle moderimi",
"moreParticipantOptions": "Më tepër mundësi pjesëmarrësi",
"mute": "Heshtoje",
"muteAll": "Heshtoji të tërë",
"muteEveryoneElse": "Heshto gjithkënd tjetër",
"reject": "Hidhe poshtë",
"stopEveryonesVideo": "Ndal videon e gjithkujt",
"stopVideo": "Ndale videon",
"unblockEveryoneMicCamera": "Zhblloko mikrofonin dhe kamerën e gjithkujt",
"videoModeration": "Nisin videon e vetes"
"mute": "Të heshtoj",
"muteAll": "Të heshtoj të tërë",
"muteEveryoneElse": "Të heshtojnë gjithkënd tjetër",
"reject": "Të hedhin poshtë",
"stopDesktop": "Të ndalin tregim ekrani",
"stopEveryonesDesktop": "Të ndalin tregim ekrani të kujtdo",
"stopEveryonesVideo": "Të ndalin videon e gjithkujt",
"stopVideo": "Të ndalin video",
"unblockEveryoneMicCamera": "Të zhbllokojnë mikrofonin dhe kamerën e gjithkujt",
"videoModeration": "Të nisin videon e tyre"
},
"close": "Mbylle",
"headings": {
"lobby": "Holli ({{count}})",
"participantsList": "Pjesëmarrës takim ({{count}})",
"visitorInQueue": " (në pritje {{count}})",
"visitorRequests": " (requests {{count}})",
"visitors": "Vizitorë {{count}}",
"lobby": "Holl ({{count}})",
"participantsList": "Pjesëmarrës takimi ({{count}})",
"viewerRequests": "Kërkesa parësish {{count}}",
"visitorInQueue": " (në radhë {{count}})",
"visitorRequests": " (kërkesa {{count}})",
"visitors": "Parës {{count}}",
"visitorsList": "Parës ({{count}})",
"waitingLobby": "Duke pritur në holl ({{count}})"
},
"search": "Kërkoni te pjesëmarrësit",
"searchDescription": "Që të filtrohen pjesëmarrës, filloni të shtypni në tastierë",
"title": "Pjesëmarrës"
},
"passwordDigitsOnly": "Deri në {{number}} shifra",
@@ -889,6 +980,9 @@
"by": "Nga {{ name }}",
"closeButton": "Mbylle pyetësorin",
"create": {
"accessibilityLabel": {
"send": "Dërgo pyetësor"
},
"addOption": "Shtoni mundësi",
"answerPlaceholder": "Mundësia {{index}}",
"cancel": "Anuloje",
@@ -897,11 +991,10 @@
"pollQuestion": "Pyetje Pyetësori",
"questionPlaceholder": "Bëni një pyetje",
"removeOption": "Hiqe mundësinë",
"save": "Ruaje",
"send": "Dërgoje"
"save": "Ruaje"
},
"errors": {
"notUniqueOption": "Opsionet duhet të jenë unike"
"notUniqueOption": "Mundësitë duhet të jenë unike"
},
"notification": {
"description": "Që të votoni, hapni skedën e pyetësorëve",
@@ -909,7 +1002,7 @@
},
"results": {
"changeVote": "Ndryshoni votën",
"empty": "Te takimi ska ende pyetësorë. Nisni një pyetësor këtu!",
"empty": "Te takimi ska ende pyetësorë.",
"hideDetailedResults": "Fshihi hollësitë",
"showDetailedResults": "Shfaqi hollësitë",
"vote": "Votoni"
@@ -938,11 +1031,11 @@
"audioHighQuality": "Presim që audioja juaj të jetë në cilësi të shkëlqyer.",
"audioLowNoVideo": "Presim që audioja juaj të jetë në cilësi të ulët dhe sdo të ketë video.",
"goodQuality": "Shkëlqyeshëm! Cilësia e medias tuaj do të jetë shumë e mirë.",
"noMediaConnectivity": "Sgjetëm dot rrugë për të vendosur lidhje media për këtë provë. Zakonisht kjo shkaktohet nga një firewall ose NAT.",
"noMediaConnectivity": "Sgjetëm dot rrugë për të vendosur lidhje media për këtë provë. Zakonisht kjo shkaktohet nga një firewall”, ose NAT.",
"noVideo": "Presim që cilësia e videos për ju të jetë për të vënë kujën.",
"testFailed": "Prova e lidhjes hasi në probleme të papritura, por kjo mund të mos prekë funksionimin për ju.",
"undetectable": "Nëse sbëni dot ende thirrje në shfletues, rekomandojmë të siguroheni se altoparlantët, mikrofoni dhe kamera juaj janë ujdisur si duhet, se i keni akorduar shfletuesit tuaja të drejta të përdorë mikrofonin dhe kamerën tuaj, dhe se versioni i shfletuesit tuaj është i përditësuar. Nëse keni ende probleme me thirrje, duhet të lidheni me zhvilluesin e aplikacionit web.",
"veryPoorConnection": "Presim që cilësia e thirrjes te ju të jetë për të vënë kujën",
"veryPoorConnection": "Presim që cilësia e thirrjes te ju të jetë për të vënë kujën.",
"videoFreezing": "Presim që videoja te ju të ngrijë, të bëhet e zezë dhe të shfaqet tërë piksela.",
"videoHighQuality": "Presim që videoja te ju të ketë cilësi të mirë.",
"videoLowQuality": "Presim që videoja te ju të ketë cilësi të ulët, për sa i takon shpejtësisë së kuadrove dhe qartësisë.",
@@ -969,7 +1062,7 @@
"joinWithoutAudio": "Merrni pjesë pa audio",
"keyboardShortcuts": "Aktivizo shkurtore tastiere",
"linkCopied": "Lidhja u kopjua në të papastër",
"lookGood": "Gjithçka po punon si duhet",
"lookGood": "Pajisjet tuaja po punojnë si duhet",
"or": "ose",
"premeeting": "Para takimit",
"proceedAnyway": "Vazhdo, sido qoftë",
@@ -1011,7 +1104,7 @@
"type": {
"account": "Llogari",
"contact": "Kontakt",
"lead": "Lead",
"lead": "",
"opportunity": "Mundësi",
"owner": "Zotërues"
}
@@ -1026,7 +1119,7 @@
"error": "Regjistrimi dështoi. Ju lutemi, riprovoni.",
"errorFetchingLink": "Gabim në sjellje lidhje regjistrimi.",
"expandedOff": "Regjistrimi u ndal",
"expandedOn": "Takimi është aktualisht duke u regjistruar.",
"expandedOn": "Takimi është aktualisht duke u regjistruar",
"expandedPending": "Po niset regjistrimi…",
"failedToStart": "Su arrit të niset regjistrimi",
"fileSharingdescription": "Ndajeni regjistrimin me pjesëmarrësit në takim",
@@ -1036,8 +1129,6 @@
"highlightMomentSuccess": "Çasti u nxor në pah",
"highlightMomentSucessDescription": "Çasti i nxjerrë në pah nga ju do të shtohet te përmbledhja e takimit.",
"inProgress": "Regjistrim ose transmetim drejtpërsëdrejti në ecuri e sipër",
"limitNotificationDescriptionNative": "Për shkak kërkesash të shumta, regjistrimi juaj do të kufizohet në {{limit}} min. Për regjistrime të pakufizuara provoni <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Për shkak kërkesash të shumta, regjistrimi juaj do të kufizohet në {{limit}} min. Për regjistrime të pakufizuara provoni <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Kemi prodhuar një lidhje për te regjistrimi juaj.",
"localRecordingNoNotificationWarning": "Regjistrimi sdo tu njoftohet pjesëmarrësve të tjerë. Do tju duhet ti vini në dijeni se takimi po regjistrohet.",
"localRecordingNoVideo": "Videoja spo regjistrohet",
@@ -1099,6 +1190,7 @@
"signedIn": "Aktualisht po shihen veprimtari kalendari për {{email}}. Klikoni mbi butonin Shkëputu më poshtë që të ndalni parjen e veprimtarive të kalendarit.",
"title": "Kalendar"
},
"chatWithPermissions": "Çaktivizo fjalosje për jo-moderatorë",
"desktopShareFramerate": "Shpejtësi kuadrosh për tregim desktopi",
"desktopShareHighFpsWarning": "Një shpejtësi më e madhe për tregimin e ekranit mund të ketë ndikim në konsumin e gjerësisë së bandës. Që të hyjnë në fuqi rregullimet e reja, lypset të rinisni tregimin e ekranit.",
"desktopShareWarning": "Që të hyjnë në fuqi rregullimet e reja, duhet të rinisni tregimin e ekranit.",
@@ -1113,7 +1205,7 @@
"microphones": "Mikrofona",
"moderator": "Moderator",
"moderatorOptions": "Mundësi moderatori",
"more": "Të përgjitshme",
"more": "Të përgjithshme",
"name": "Emër",
"noDevice": "Asnjë",
"notifications": "Njoftime",
@@ -1128,6 +1220,7 @@
"selectMic": "Mikrofon",
"selfView": "Parje e vetes",
"shortcuts": "Shkurtore",
"showSubtitlesOnStage": "Shfaq titra në skenë",
"speakers": "Altoparlantë",
"startAudioMuted": "Gjithkush fillon i heshtuar",
"startReactionsMuted": "Heshto tinguj reagimesh për këdo",
@@ -1181,11 +1274,13 @@
"fearful": "I frikësuar",
"happy": "I gëzuar",
"hours": "{{count}}h",
"labelTooltip": "Numër pjesëmarrësish: {{count}}",
"minutes": "{{count}}m",
"name": "Emër",
"neutral": "Asnjanës",
"sad": "I trishtuar",
"search": "Kërko",
"searchDescription": "Që të filtrohen pjesëmarrësh, filloni të shtypni",
"searchHint": "Kërkoni për pjesëmarrës",
"seconds": "{{count}}s",
"speakerStats": "Statistika Folësi",
@@ -1220,23 +1315,25 @@
"chat": "Hapni / Mbyllni fjalosje",
"clap": "Duartrokitje",
"closeChat": "Mbylle fjalosjen",
"closeCustomPanel": "Mbylle",
"closeMoreActions": "Mbyll menunë Më Tepër Veprime",
"closeParticipantsPane": "Mbyll kuadratin pjesëmarrës",
"closedCaptions": "Titra të mbyllur",
"collapse": "Tkurre",
"document": "Shfaq/Fshih dokument të ndarë",
"documentClose": "Mbyll dokument ndarë",
"documentClose": "Mbylle dokumentin e ndarë",
"documentOpen": "Hap dokument të ndarë",
"download": "Shkarkoni aplikacionet tona",
"embedMeeting": "Trupëzoni takimin",
"endConference": "Përfundoje takimin për të tërë",
"endConference": "Përfundoje takimin për gjithkënd",
"enterFullScreen": "Shiheni sa krejt ekrani",
"enterTileView": "Kaloni nën mënyrën me kuadrate",
"exitFullScreen": "Dil nga mënyra “Sa krejt ekrani”",
"exitTileView": "Dil nga mënyra me kuadrate",
"enterTileView": "Kaloni në pamje me kuadrate",
"exitFullScreen": "Dilni nga mënyra “Sa krejt ekrani”",
"exitTileView": "Dilni nga pamje me kuadrate",
"expand": "Zgjeroje",
"feedback": "Lini përshtypje",
"fullScreen": "Kalo nën/Dil nga mënyra “Sa krejt ekrani”",
"giphy": "Shfaq/fshih menunë GIPHY",
"fullScreen": "Kaloni në/Dilni nga mënyra “Sa krejt ekrani”",
"giphy": "Shfaqni/Fshihni menunë GIPHY",
"grantModerator": "Akordoji të Drejta Moderatori",
"hangup": "Braktiseni takimin",
"heading": "Panel",
@@ -1246,7 +1343,7 @@
"kick": "Përzëre pjesëmarrësin",
"laugh": "E qeshur",
"leaveConference": "Dilni nga takimi",
"like": "Thumbs Up",
"like": "",
"linkToSalesforce": "Lidhje për te Salesforce",
"lobbyButton": "Aktivizo/Çaktivizoni mënyrën holl",
"localRecording": "Shfaq/Fshih kontrolle regjistrimi vendor",
@@ -1262,9 +1359,9 @@
"muteEveryoneElsesVideoStream": "Ndal videon e gjithkujt tjetër",
"muteEveryonesVideoStream": "Ndal videon e gjithkujt",
"muteGUMPending": "Po lidhet mikrofoni juaj",
"noiseSuppression": "Mbytje zhurmash",
"noiseSuppression": "Mbytje zhurmash ekstra",
"openChat": "Hapni fjalosje",
"participants": "Hapni kuadrat pjesëmarrësish",
"participants": "Hapni kuadrat pjesëmarrësish. {{participantsCount}} pjesëmarrës",
"pip": "Aktivizo/Çaktivizo mënyrën “Picture-in-Picture”",
"privateMessage": "Dërgoni mesazh privat",
"profile": "Përpunoni profilin tuaj",
@@ -1300,68 +1397,87 @@
"videounmute": "Nis kamerën"
},
"addPeople": "Shtoni persona te thirrja juaj",
"audioOnlyOff": "Çaktivizo mënyrën “Sasi e ulët të dhënash trafiku”",
"audioOnlyOn": "Aktivizo mënyrën “Sasi e ulët të dhënash trafiku”",
"advancedAudioSettings": {
"aec": {
"label": "Asgjësim jehone akustike"
},
"agc": {
"label": "Kontroll i automatizuar gain-i"
},
"ns": {
"label": "Mbytje zhurmash"
},
"stereo": {
"label": "Stereo"
}
},
"audioOnlyOff": "Aktivizo mënyrën gjerësi e ulët bande",
"audioOnlyOn": "Çaktivizo mënyrën gjerësi e ulët bande",
"audioRoute": "Përzgjidhni pajisje zëri",
"audioSettings": "Rregullime për audion",
"authenticate": "Bëni mirëfilltësimin",
"boo": "Ya",
"callQuality": "Administroni cilësi video",
"chat": "Hap / Mbyll fjalosje",
"clap": "Duartrokitje",
"closeChat": "Mbyll fjalosjen",
"closeParticipantsPane": "Mbylle kuadratin e pjesëmarrësve",
"closeReactionsMenu": "Mbyll menu reagimesh",
"disableNoiseSuppression": "Çaktivizo mbytje zhurmash",
"audioSettings": "Rregullime audio",
"authenticate": "Bëni mirëfilltësimiin",
"boo": "Buuu",
"callQuality": "Administroni cilësi videosh",
"chat": "Hapni / Mbyllni fjalosjen",
"clap": "Duartrokitni",
"closeChat": "Mbylleni fjalosjen",
"closeCustomPanel": "Mbylle",
"closeParticipantsPane": "Mbyllni kuadrat pjesëmarrësish",
"closeReactionsMenu": "Mbyllni menu reagimesh",
"closedCaptions": "Titra të mbyllur",
"copilot": "Copilot",
"disableNoiseSuppression": "Çaktivizoni asgjësim ekstra zhurmash",
"disableReactionSounds": "Mund të çaktivizoni tinguj reagimesh për këtë takim",
"documentClose": "Mbylle dokumentin e ndarë",
"documentOpen": "Hape dokumentin e ndarë",
"download": "Shkarkoni aplikacione tonat",
"e2ee": "Fshehtëzim Skaj-Më-Skaj",
"documentClose": "Mbyll dokument ndarë",
"documentOpen": "Hap dokument ndarë",
"download": "Shkarkoni aplikacionet tona",
"e2ee": "Fshehtëzim Skaj-më-Skaj",
"embedMeeting": "Trupëzoni takim",
"enableNoiseSuppression": "Aktivizoni mbytje zhurmash",
"enableNoiseSuppression": "Aktivizoni asgjësim ekstra zhurmash",
"endConference": "Përfundoje takimin për të tërë",
"enterFullScreen": "Shiheni sa krejt ekrani",
"enterTileView": "Kalo te pamja me kuadrate",
"exitFullScreen": "Dil nga mënyra sa krejt ekrani",
"exitTileView": "Dil nga pamja me kuadrate",
"enterTileView": "Kaloni nën mënyrën me kuadrate",
"exitFullScreen": "Dil nga mënyra “Sa krejt ekrani",
"exitTileView": "Dil nga mënyra me kuadrate",
"feedback": "Lini përshtypje",
"giphy": "Shfaq/Fshih menunë GIPHY",
"hangup": "Braktisni takimin",
"fileSharing": "Dhënie kartelash",
"giphy": "Shfaq/fshih menunë GIPHY",
"hangup": "Braktiseni takimin",
"help": "Ndihmë",
"hideWhiteboard": "Fshihe tabelën",
"invite": "Ftoni persona",
"invite": "Ftoni njerëz",
"joinBreakoutRoom": "Hyni në dhomë aneks konsultimesh",
"laugh": "Qeshje",
"laugh": "E qeshur",
"leaveBreakoutRoom": "Dilni nga dhomë aneks konsultimesh",
"leaveConference": "Dilni nga takimi",
"like": "Thumbs Up",
"linkToSalesforce": "Lidhje për te Salesforce",
"lobbyButtonDisable": "Çaktivizo mënyrën holl",
"lobbyButtonEnable": "Aktivizo mënyrën holl",
"login": "Hyrje",
"logout": "Dalje",
"like": "",
"linkToSalesforce": "Lidhje për te",
"lobbyButtonDisable": "Çaktivizoni mënyrën holl",
"lobbyButtonEnable": "Aktivizoni mënyrën holl",
"login": "Hyni",
"logout": "Dilni",
"love": "Zemër",
"lowerYourHand": "Ulni dorën",
"moreActions": "Më tepër veprime",
"moreOptions": "Më tepër veprime",
"mute": "Heshto mikrofonin",
"muteEveryone": "Heshto gjithkënd",
"muteEveryonesVideo": "Çaktivizo videon e gjithkujt",
"muteEveryonesVideo": "Çaktivizo kamerën e gjithkujt",
"muteGUMPending": "Po lidhet mikrofoni juaj",
"noAudioSignalDesc": "Nëse se keni heshtuar që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e ndërrimit të pajisjes.",
"noAudioSignalDescSuggestion": "Nëse se keni heshtuar që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e kalimit te pajisja e sugjeruar.",
"noAudioSignalDesc": "Nëse se keni heshtuar qëllimisht që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e ndërrimit të pajisjes.",
"noAudioSignalDescSuggestion": "Nëse se keni heshtuar qëllimisht që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e kalimit te pajisja e sugjeruar.",
"noAudioSignalDialInDesc": "Mund ti bini numrit edhe duke përdorur:",
"noAudioSignalDialInLinkDesc": "Numra thirrjeje",
"noAudioSignalTitle": "Ska sinjal që vjen nga mikrofoni juaj!",
"noiseSuppression": "Mbytje zhurmash",
"noiseSuppression": "Mbytje zhurmash ekstra",
"noisyAudioInputDesc": "Dëgjohet sikur mikrofoni juaj prodhon zhurmë, ju lutemi, shihni mundësinë e heshtimit të tij, ose të ndërrimit të pajisjes.",
"noisyAudioInputTitle": "Mikrofoni juaj duket të jetë i zhurmshëm!",
"openChat": "Hapni fjalosje",
"openReactionsMenu": "Hap menu reagimesh",
"participants": "Pjesëmarrës",
"pip": "Kalo nën mënyrën “Picture-in-Picture”",
"privateMessage": "Dërgo mesazh privat",
"polls": "Pyetësorë",
"privateMessage": "Dërgoni mesazh privat",
"profile": "Përpunoni profilin tuaj",
"raiseHand": "Ngrini dorën",
"raiseYourHand": "Ngrini dorën",
@@ -1370,6 +1486,7 @@
"reactionHeart": "Dërgoni reagim me zemër",
"reactionLaugh": "Dërgoni reagim me qeshje",
"reactionLike": "Dërgoni reagim me “thumbs up”",
"reactionLove": "Dërgoni reagim me dashuri",
"reactionSilence": "Dërgoni reagim me heshtje",
"reactionSurprised": "Dërgoni reagim të befasuari",
"reactions": "Reagime",
@@ -1381,9 +1498,9 @@
"shortcuts": "Shihni shkurtore",
"showWhiteboard": "Shfaq tabelë",
"silence": "Heshtje",
"speakerStats": "Statistika folësi",
"speakerStats": "Statistika pjesëmarrësish",
"startScreenSharing": "Nise tregimin e ekranit",
"startSubtitles": "Nis titra",
"startSubtitles": "Titra • {{language}}",
"stopAudioSharing": "Ndal ndarje audioje me të tjerë",
"stopScreenSharing": "Ndale tregimin e ekranit",
"stopSharedVideo": "Ndale videon",
@@ -1401,15 +1518,19 @@
"transcribing": {
"ccButtonTooltip": "Ndali / Nisi titrat",
"expandedLabel": "Transkriptimi aktualisht është aktiv",
"failedToStart": "Su arrit të nisej transkriptim",
"labelToolTip": "Takimit po i bëhet transkriptim",
"sourceLanguageDesc": "Aktualisht si gjuhë takimi është caktuar <b>{{sourceLanguage}}</b>. <br/> Mund ta ndryshoni që nga ",
"failed": "Transkriptimi dështoi",
"labelTooltip": "Ky takim po transkriptohet.",
"labelTooltipExtra": "Përveç kësaj, më vonë do të ketë një transkriptim të gatshëm.",
"openClosedCaptions": "Hap titra të mbyllur",
"original": "Origjinali",
"sourceLanguageDesc": "Aktualisht si gjuhë e mbledhjes është vënë <b>{{sourceLanguage}}</b>. <br/> Mundeni ta ndryshoni që nga ",
"sourceLanguageHere": "këtu",
"start": "Fillo shfaqje titrash",
"stop": "Ndal shfaqje titrash",
"subtitles": "Titra",
"subtitlesOff": "Off",
"tr": "TR"
"tr": "TR",
"translateTo": "Përktheje në"
},
"unpinParticipant": "{{participantName}} - Hiqja fiksimin",
"userMedia": {
@@ -1441,7 +1562,7 @@
"ldTooltip": "Po shihet video në cilësi të ulët",
"lowDefinition": "Cilësi e ulët",
"performanceSettings": "Rregullime funksionimi",
"recording": "Regjistrim në kryerje e sipër",
"recording": "Ky takim po regjistrohet.",
"sd": "CS",
"sdTooltip": "Po shihet video në cilësi standarde",
"standardDefinition": "Cilësi standarde",
@@ -1451,6 +1572,8 @@
"connectionInfo": "Hollësi Lidhjeje",
"demote": "Kaloje te vizitorët",
"domute": "Heshtoje",
"domuteDesktop": "Ndaleni tregimin e ekranit",
"domuteDesktopOfOthers": "Ndaleni tregimin e ekranit për këdo tjetër",
"domuteOthers": "Heshto gjithkënd tjetër",
"domuteVideo": "Çaktivizoje kamerën",
"domuteVideoOfOthers": "Çaktivizo kamerën e gjithkujt tjetër",
@@ -1501,21 +1624,23 @@
"webAssemblyWarningDescription": "WebAssembly e çaktivizuar ose e pambuluar nga ky shfletues"
},
"visitors": {
"chatIndicator": "(vizitor)",
"chatIndicator": "(parës)",
"joinMeeting": {
"description": "Aktualisht jeni vëzhgues në këtë konferencë.",
"raiseHand": "Ngrini dorën",
"title": "Hyrje në takim",
"wishToSpeak": "Nëse dëshironi të flisni, ju lutemi, ngrini dorën më poshtë dhe prisni miratimin e moderatorit."
},
"labelTooltip": "Numër vizitorësh: {{count}}",
"labelTooltip": "Numër parësish: {{count}}",
"notification": {
"demoteDescription": "Dërguar këtu nga {{actor}}, që të merrni pjesë, ngrini dorën",
"noMainParticipantsDescription": "Duhet që një pjesëmarrëstë nisë takimin. Ju lutemi, riprovoni pas pak.",
"noMainParticipantsDescription": "Duhet që një pjesëmarrës të nisë takimin. Ju lutemi, riprovoni pas pak.",
"noMainParticipantsTitle": "Ky takim ska filluar ende.",
"noVisitorLobby": "Smund të hyni, teksa ka një holll të hapur për takimin.",
"noVisitorLobby": "Smund të hyni, teksa ka një holl të hapur për takimin.",
"notAllowedPromotion": "Lypset që së pari një pjesëmarrës të lejojë kërkesën tuaj.",
"title": "Jeni vizitor në takim"
"requestToJoin": "U ngrit Dorë",
"requestToJoinDescription": "Kërkesa juaj iu dërgua moderatorëve. Mos u largoni!",
"title": "Jeni një parës te takimi"
},
"waitingMessage": "Do të merrni pjesë në këta takim sapo të fillojë!"
},

View File

@@ -429,9 +429,7 @@
"recentlyUsedObjects": "Dina senaste använda objekt",
"recording": "Inspelning",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Ej möjligt medan livestreaming pågår.",
"recordingInProgressDescription": "Mötet spelas in och analyseras av AI{{learnMore}}. Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.",
"recordingInProgressDescriptionFirstHalf": "Mötet spelas in och analyseras av AI",
"recordingInProgressDescriptionSecondHalf": "Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.",
"recordingInProgressDescription": "Mötet spelas in och analyseras av AI. Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.",
"recordingInProgressTitle": "Inspelning pågår",
"rejoinNow": "Återanslut nu",
"remoteControlAllowedMessage": "{{user}} godkände din begäran om fjärrstyrning.",
@@ -695,8 +693,6 @@
"googlePrivacyPolicy": "Googles sekretesspolicy",
"inProgress": "Inspelning eller livestreaming pågår",
"invalidStreamKey": "Livesändningslösenordet kan vara felaktigt.",
"limitNotificationDescriptionNative": "Din strömning är begränsad till {{limit}} min. För obegränsad strömning, prova {{app}}.",
"limitNotificationDescriptionWeb": "På grund av stor efterfrågan kommer din strömning att begränsas till {{limit}} min. För obegränsad strömning, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Strömning avslutad",
"offBy": "{{name}} stoppade direktströmningen",
"on": "Strömma",
@@ -1116,8 +1112,6 @@
"highlightMomentSuccess": "Moment framhävt",
"highlightMomentSucessDescription": "Ditt framhävda ögonblick läggs till i mötessammanfattningen.",
"inProgress": "Inspelning eller livestreaming pågår",
"limitNotificationDescriptionNative": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, försök <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Vi har genererat en länk till din inspelning.",
"localRecordingNoNotificationWarning": "Inspelningen kommer inte att meddelas till andra deltagare. Du måste meddela dem att mötet inspelas.",
"localRecordingNoVideo": "Video spelas inte in",

View File

@@ -436,8 +436,6 @@
"getStreamKeyManually": "We werent able to fetch any live streams. Try getting your live stream key from YouTube.",
"googlePrivacyPolicy": "గూగుల్ గోప్యతా విధానం",
"invalidStreamKey": "Live stream key may be incorrect.",
"limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.",
"limitNotificationDescriptionWeb": "Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Live Streaming stopped",
"offBy": "{{name}} stopped the live streaming",
"on": "Live Streaming started",
@@ -672,8 +670,6 @@
"expandedPending": "రికార్డింగు మొదలవుతూన్నది…",
"failedToStart": "రికార్డింగు మొదలవడం విఫలమైంది",
"fileSharingdescription": "రికార్డింగును సదస్యులతో పంచుకోండి",
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"live": "LIVE",
"loggedIn": "{{userName}}‌గా ప్రవేశించారు",
"off": "రికార్డింగు ఆగిపోయింది",

View File

@@ -634,8 +634,6 @@
"googlePrivacyPolicy": "Google Gizlilik Politikası",
"inProgress": "Kaydetme veya canlı akış işlemde",
"invalidStreamKey": "Canlı akış anahtarı yanlış olabilir.",
"limitNotificationDescriptionNative": "Akışınız {{limit}} dk ile sınırlı olacak. Sınırsız akış için {{app}} deneyin.",
"limitNotificationDescriptionWeb": "Yüksek talep nedeniyle akışınız {{limit}} dk ile sınırlı olacaktır. Sınırsız akış için <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> deneyin.",
"off": "Canlı Akış durduruldu",
"offBy": "{{name}} canlı akışı durdurdu",
"on": "Canlı Akış başlatıldı",
@@ -1031,8 +1029,6 @@
"highlightMomentSuccess": "An vurgulandı",
"highlightMomentSucessDescription": "Vurgulanan anınız toplantı özetine eklenecektir.",
"inProgress": "Kayıt veya canlı akış devam ediyor",
"limitNotificationDescriptionNative": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Kaydınızla ilgili link oluşturduk.",
"localRecordingNoNotificationWarning": "Kayıt diğer katılımcılara duyurulmayacaktır. Onlara toplantının kaydedildiğini bildirmeniz gerekecek.",
"localRecordingNoVideo": "Video kaydedilmiyor",

View File

@@ -564,8 +564,6 @@
"googlePrivacyPolicy": "Політика конфіденційності Google",
"inProgress": "Триває запис або трансляція наживо",
"invalidStreamKey": "Ключ до трансляції наживо неправильний.",
"limitNotificationDescriptionNative": "Ваша трансляція наживо буде обмежена {{limit}} хв. Для необмеженої трансляції, спробуйте {{app}}",
"limitNotificationDescriptionWeb": "Через високе навантаження, трансляція наживо буде обмежена {{limit}} хв. Для необмеженої трансляції, спробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Трансляцію наживо зупинено",
"offBy": "{{name}} зупинив трансляцію наживо",
"on": "Трансляція наживо",
@@ -930,8 +928,6 @@
"highlightMomentSuccess": "Подію виділено",
"highlightMomentSucessDescription": "Виділену подію буде додано до підсумку зустрічі.",
"inProgress": "Триває запис або трансляція наживо",
"limitNotificationDescriptionNative": "Через велике навантаження сервера ваш запис буде обмежено {{limit}}хв. Для можливості безлімітних записів, спробуйте <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Через велике навантаження сервера ваш запис буде обмежено {{limit}} хв. Для можливості безлімітних записів, спробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Готово посилання на ваш запис.",
"live": "НАЖИВО",
"localRecordingNoNotificationWarning": "Наявність посилання на запис зустрічі не анонсується іншим учасникам. Повідомте їм про це окремо.",

View File

@@ -629,8 +629,6 @@
"googlePrivacyPolicy": "Chính sách bảo mật của Google",
"inProgress": "Đang ghi hoặc phát trực tiếp",
"invalidStreamKey": "Mã phát trực tuyến có thể sai.",
"limitNotificationDescriptionNative": "Việc phát trực tuyến của bạn sẽ bị giới hạn ở {{limit}} phút. Để phát trực tuyến không giới hạn, hãy thử {{app}}.",
"limitNotificationDescriptionWeb": "Do nhu cầu cao, việc phát trực tuyến của bạn sẽ bị giới hạn ở {{limit}} phút. Để phát trực tuyến không giới hạn, hãy thử <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}</a>.",
"off": "Phát trực tuyến đã dừng",
"offBy": "{{name}} đã dừng ghi",
"on": "Phát trực tuyến",
@@ -1009,8 +1007,6 @@
"highlightMomentSuccess": "Khoảnh khắc được đánh dấu",
"highlightMomentSucessDescription": "Khoảnh khắc bạn đã đánh dấu sẽ được thêm vào tóm tắt cuộc họp.",
"inProgress": "Đang ghi âm hoặc phát trực tiếp",
"limitNotificationDescriptionNative": "Do nhu cầu cao, ghi âm của bạn sẽ bị giới hạn trong {{limit}} phút. Để có ghi âm không giới hạn, hãy thử <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Do nhu cầu cao, ghi âm của bạn sẽ bị giới hạn trong {{limit}} phút. Để có ghi âm không giới hạn, hãy thử <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "Chúng tôi đã tạo một liên kết đến ghi âm của bạn.",
"localRecordingNoNotificationWarning": "Cuộc họp sẽ không được thông báo cho các thành viên khác. Bạn sẽ cần thông báo cho họ biết cuộc họp đang được ghi âm.",
"localRecordingNoVideo": "Video không được ghi lại",

View File

@@ -433,9 +433,7 @@
"recentlyUsedObjects": "你最近使用的对象",
"recording": "录制中",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "直播时无法使用",
"recordingInProgressDescription": "本会议正由AI录制并分析{{learnMore}},你已被静音。如需发言,视为同意录制。",
"recordingInProgressDescriptionFirstHalf": "本会议正由AI录制并分析",
"recordingInProgressDescriptionSecondHalf": ",你已被静音。如需发言,视为同意录制。",
"recordingInProgressDescription": "本会议正由AI录制并分析你已被静音。如需发言视为同意录制。",
"recordingInProgressTitle": "录制中",
"rejoinNow": "马上重新加入",
"remoteControlAllowedMessage": "{{user}}接受了你的远程控制请求!",
@@ -699,8 +697,6 @@
"googlePrivacyPolicy": "Google 隐私权政策",
"inProgress": "录制或直播正在进行中",
"invalidStreamKey": "直播码可能不正确。",
"limitNotificationDescriptionNative": "你的直播将被限制在{{limit}}分钟之内,如需不受限的直播,请使用{{app}}。",
"limitNotificationDescriptionWeb": "由于需求量大,你的直播将被限制在{{limit}}分钟之内。如需不受限的直播,请使用<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
"off": "直播已停止",
"offBy": "{{name}}已停止直播",
"on": "直播已开始",
@@ -1122,8 +1118,6 @@
"highlightMomentSuccess": "时刻已突出显示",
"highlightMomentSucessDescription": "你突出显示的时刻将会添加到会议摘要中。",
"inProgress": "正在进行录制或直播流",
"limitNotificationDescriptionNative": "由于高需求,您的录制将限制在{{limit}}分钟内。若要无限制录制,请尝试<3>{{app}}</3>。",
"limitNotificationDescriptionWeb": "由于高需求,您的录制将限制在{{limit}}分钟内。若要无限制录制,请尝试<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
"linkGenerated": "我们已生成录制链接。",
"localRecordingNoNotificationWarning": "系统不会主动通知参会者录制已开启,主持人需另行提醒。",
"localRecordingNoVideo": "视频未被录制",

View File

@@ -433,9 +433,7 @@
"recentlyUsedObjects": "您最近使用過的物件",
"recording": "錄製中",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "正在直播時無法使用",
"recordingInProgressDescription": "本會議正在錄製並由 AI 分析{{learnMore}},您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。",
"recordingInProgressDescriptionFirstHalf": "本會議正在錄製並由 AI 分析",
"recordingInProgressDescriptionSecondHalf": ",您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。",
"recordingInProgressDescription": "本會議正在錄製並由 AI 分析,您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。",
"recordingInProgressTitle": "正在錄製",
"rejoinNow": "立即重新加入",
"remoteControlAllowedMessage": "{{user}} 接受您進行遠端控制的請求!",
@@ -699,8 +697,6 @@
"googlePrivacyPolicy": "Google 隱私權政策",
"inProgress": "正在錄製或直播",
"invalidStreamKey": "直播串流金鑰可能不正確。",
"limitNotificationDescriptionNative": "您的最大直播長度將被限制在 {{limit}} 分鐘,若要不受限的直播,請使用 {{app}}。",
"limitNotificationDescriptionWeb": "由於目前流量過大,您的最大直播長度將被限制在 {{limit}} 分鐘。若要不受限的直播,請使用 <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
"off": "直播串流已停用",
"offBy": "{{name}} 停用了直播串流",
"on": "直播串流已啟動",
@@ -1122,8 +1118,6 @@
"highlightMomentSuccess": "已精選的時刻",
"highlightMomentSucessDescription": "您的精選時刻將新增至會議摘要。",
"inProgress": "正在錄製或直播",
"limitNotificationDescriptionNative": "由於目前流量過大,您的錄製時間被限制在 {{limit}} 分鐘。若要無限制的錄製,請試試 <3>{{app}}</3>。",
"limitNotificationDescriptionWeb": "由於目前流量過大,您的錄製時間被限制在 {{limit}} 分鐘。若要無限制的錄製,請試試 <a href={{url}}rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
"linkGenerated": "我們建立了您的錄製檔案的連結。",
"localRecordingNoNotificationWarning": "系統不會主動知會與會者錄製已開啟,主持人需另行通知。",
"localRecordingNoVideo": "沒有錄製的視訊",

View File

@@ -373,7 +373,7 @@
"kickParticipantTitle": "Kick this participant?",
"kickSystemTitle": "Ouch! You were kicked out of the meeting",
"kickTitle": "Ouch! {{participantDisplayName}} kicked you out of the meeting",
"learnMore": "learn more",
"learnMore": "Learn more",
"linkMeeting": "Link meeting",
"linkMeetingTitle": "Link meeting to Salesforce",
"liveStreaming": "Live Streaming",
@@ -383,6 +383,8 @@
"lockRoom": "Add meeting $t(lockRoomPassword)",
"lockTitle": "Lock failed",
"login": "Login",
"loginFailed": "Login failed.",
"loginOnResume": "Your authentication session has expired. You need to login again to continue the meeting.",
"loginQuestion": "Are you sure you want to login and leave the conference?",
"logoutQuestion": "Are you sure you want to logout and leave the conference?",
"logoutTitle": "Logout",
@@ -443,9 +445,7 @@
"recentlyUsedObjects": "Your recently used objects",
"recording": "Recording",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
"recordingInProgressDescription": "This meeting is being recorded and analyzed by AI{{learnMore}}. Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
"recordingInProgressDescriptionFirstHalf": "This meeting is being recorded and analyzed by AI",
"recordingInProgressDescriptionSecondHalf": ". Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
"recordingInProgressDescription": "This meeting is being recorded and analyzed by AI. Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
"recordingInProgressTitle": "Recording in progress",
"rejoinNow": "Rejoin now",
"remoteControlAllowedMessage": "{{user}} accepted your remote control request!",
@@ -592,6 +592,7 @@
"newFileNotification": "{{ participantName }} shared '{{ fileName }}'",
"removeFile": "Remove",
"removeFileSuccess": "File removed successfully",
"uploadDisabled": "Not allowed to upload files. Ask a moderator for permission rights for that operation.",
"uploadFailedDescription": "Please try again.",
"uploadFailedTitle": "Upload failed",
"uploadFile": "Share file"
@@ -709,8 +710,6 @@
"googlePrivacyPolicy": "Google Privacy Policy",
"inProgress": "Recording or live streaming in progress",
"invalidStreamKey": "Live stream key may be incorrect.",
"limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.",
"limitNotificationDescriptionWeb": "Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"off": "Live Streaming stopped",
"offBy": "{{name}} stopped the live streaming",
"on": "Live Streaming started",
@@ -727,6 +726,7 @@
"streamIdHelp": "What's this?",
"title": "Live Stream",
"unavailableTitle": "Live Streaming unavailable",
"youTubeGoLiveWarning": "Remember to click 'Go Live' in YouTube Studio if Auto-Start/Auto-Stop are disabled. Otherwise the stream will not begin recording.",
"youtubeTerms": "YouTube terms of services"
},
"lobby": {
@@ -1130,8 +1130,6 @@
"highlightMomentSuccess": "Moment highlighted",
"highlightMomentSucessDescription": "Your highlighted moment will be added to the meeting summary.",
"inProgress": "Recording or live streaming in progress",
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}</3>.",
"limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"linkGenerated": "We have generated a link to your recording.",
"localRecordingNoNotificationWarning": "The recording will not be announced to other participants. You will need to let them know that the meeting is recorded.",
"localRecordingNoVideo": "Video is not being recorded",

View File

@@ -2253,6 +2253,32 @@ class API {
});
}
/**
* Notify the external application that a file has been uploaded.
*
* @param {Object} fileMetadata - The file metadata.
* @returns {void}
*/
notifyFileUploaded(fileMetadata) {
this._sendEvent({
name: 'file-uploaded',
file: fileMetadata
});
}
/**
* Notify the external application that a file has been deleted.
*
* @param {string} fileId - The ID of the deleted file.
* @returns {void}
*/
notifyFileDeleted(fileId) {
this._sendEvent({
name: 'file-deleted',
fileId
});
}
/**
* Notify the external application that the audio or video is being shared by a participant.
*

View File

@@ -133,6 +133,8 @@ const events = {
'face-landmark-detected': 'faceLandmarkDetected',
'feedback-submitted': 'feedbackSubmitted',
'feedback-prompt-displayed': 'feedbackPromptDisplayed',
'file-deleted': 'fileDeleted',
'file-uploaded': 'fileUploaded',
'filmstrip-display-changed': 'filmstripDisplayChanged',
'incoming-message': 'incomingMessage',
'knocking-participant': 'knockingParticipant',
@@ -773,7 +775,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
* @returns {void}
*
* @deprecated
* NOTE: This method is not removed for backward comatability purposes.
* NOTE: This method is not removed for backward compatibility purposes.
*/
addEventListener(event, listener) {
this.on(event, listener);
@@ -860,7 +862,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
* @returns {void}
*
* @deprecated
* NOTE: This method is not removed for backward comatability purposes.
* NOTE: This method is not removed for backward compatibility purposes.
*/
addEventListeners(listeners) {
for (const event in listeners) { // eslint-disable-line guard-for-in
@@ -1411,7 +1413,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
* @returns {void}
*
* @deprecated
* NOTE: This method is not removed for backward comatability purposes.
* NOTE: This method is not removed for backward compatibility purposes.
*/
removeEventListener(event) {
this.removeAllListeners(event);
@@ -1424,7 +1426,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
* @returns {void}
*
* @deprecated
* NOTE: This method is not removed for backward comatability purposes.
* NOTE: This method is not removed for backward compatibility purposes.
*/
removeEventListeners(eventList) {
eventList.forEach(event => this.removeEventListener(event));

806
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -72,8 +72,8 @@
"js-md5": "0.6.1",
"js-sha512": "0.8.0",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2124.0.0+80df84a1/lib-jitsi-meet.tgz",
"lodash-es": "4.17.21",
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2132.0.0+92c8c183/lib-jitsi-meet.tgz",
"lodash-es": "4.17.23",
"null-loader": "4.0.1",
"optional-require": "1.0.3",
"pixelmatch": "5.3.0",
@@ -197,11 +197,11 @@
"webpack": "5.105.0",
"webpack-bundle-analyzer": "4.4.2",
"webpack-cli": "5.1.4",
"webpack-dev-server": "5.1.0"
"webpack-dev-server": "5.2.1"
},
"engines": {
"node": ">=22.0.0",
"npm": ">=10.0.0"
"node": ">=24.0.0",
"npm": ">=11.0.0"
},
"license": "Apache-2.0",
"scripts": {

View File

@@ -113,12 +113,13 @@ export function maybeRedirectToTokenAuthUrl(
const audioMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.AUDIO);
const videoMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.VIDEO);
if (!isTokenAuthEnabled(config)) {
if (!isTokenAuthEnabled(state)) {
return false;
}
// if tokenAuthUrl check jwt if is about to expire go through the url to get new token
const jwt = state['features/base/jwt'].jwt;
const refreshToken = state['features/base/jwt'].refreshToken;
const expirationDate = getJwtExpirationDate(jwt);
// if there is jwt and its expiration time is less than 3 minutes away
@@ -137,7 +138,8 @@ export function maybeRedirectToTokenAuthUrl(
videoMuted
},
room,
tenant
tenant,
refreshToken
)
.then((tokenAuthServiceUrl: string | undefined) => {
if (!tokenAuthServiceUrl) {
@@ -148,8 +150,8 @@ export function maybeRedirectToTokenAuthUrl(
return dispatch(openTokenAuthUrl(tokenAuthServiceUrl));
})
.catch(() => {
failureCallback();
.catch(e => {
failureCallback(e);
});
return true;

View File

@@ -11,8 +11,9 @@ const route = {
* store.
*
* @param {any} _stateful - Used on web.
* @param {any} _dispatch - Used on web.
* @returns {Promise<Object>}
*/
export function _getRouteToRender(_stateful?: any) {
export function _getRouteToRender(_stateful?: any): Promise<object> {
return Promise.resolve(route);
}

View File

@@ -1,13 +1,10 @@
// @ts-expect-error
import { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';
import { getTokenAuthUrl } from '../authentication/functions.web';
import { IStateful } from '../base/app/types';
import { isRoomValid } from '../base/conference/functions';
import { isSupportedBrowser } from '../base/environment/environment';
import { browser } from '../base/lib-jitsi-meet';
import { toState } from '../base/redux/functions';
import { parseURIString } from '../base/util/uri';
import Conference from '../conference/components/web/Conference';
import { getDeepLinkingPage } from '../deep-linking/functions';
import UnsupportedDesktopBrowser from '../unsupported-browser/components/UnsupportedDesktopBrowser';
@@ -23,9 +20,10 @@ import { IReduxState } from './types';
*
* @param {(Function|Object)} stateful - THe redux store, state, or
* {@code getState} function.
* @param {Dispatch} dispatch - The Redux dispatch function.
* @returns {Promise<Object>}
*/
export function _getRouteToRender(stateful: IStateful) {
export function _getRouteToRender(stateful: IStateful): Promise<object> {
const state = toState(stateful);
return _getWebConferenceRoute(state) || _getWebWelcomePageRoute(state);
@@ -36,9 +34,10 @@ export function _getRouteToRender(stateful: IStateful) {
* a valid conference is being joined.
*
* @param {Object} state - The redux state.
* @param {Dispatch} dispatch - The Redux dispatch function.
* @returns {Promise|undefined}
*/
function _getWebConferenceRoute(state: IReduxState) {
function _getWebConferenceRoute(state: IReduxState): Promise<any> | undefined {
const room = state['features/base/conference'].room;
if (!isRoomValid(room)) {
@@ -46,36 +45,6 @@ function _getWebConferenceRoute(state: IReduxState) {
}
const route = _getEmptyRoute();
const config = state['features/base/config'];
// if we have auto redirect enabled, and we have previously logged in successfully
// let's redirect to the auth url to get the token and login again
if (!browser.isElectron() && config.tokenAuthUrl && config.tokenAuthUrlAutoRedirect
&& state['features/authentication'].tokenAuthUrlSuccessful
&& !state['features/base/jwt'].jwt && room) {
const { locationURL = { href: '' } as URL } = state['features/base/connection'];
const { tenant } = parseURIString(locationURL.href) || {};
const { startAudioOnly } = config;
return getTokenAuthUrl(
config,
locationURL,
{
audioMuted: false,
audioOnlyEnabled: startAudioOnly,
skipPrejoin: false,
videoMuted: false
},
room,
tenant
)
.then((url: string | undefined) => {
route.href = url;
return route;
})
.catch(() => Promise.resolve(route));
}
// Update the location if it doesn't match. This happens when a room is
// joined from the welcome page. The reason for doing this instead of using

View File

@@ -3,7 +3,7 @@ import '../authentication/middleware';
import '../av-moderation/middleware';
import '../base/conference/middleware';
import '../base/i18n/middleware';
import '../base/jwt/middleware';
import '../base/jwt/middleware.any';
import '../base/known-domains/middleware';
import '../base/lastn/middleware';
import '../base/lib-jitsi-meet/middleware';

View File

@@ -1,4 +1,5 @@
import '../base/app/middleware';
import '../base/jwt/middleware.web';
import '../base/config/middleware';
import '../base/connection/middleware';
import '../base/devices/middleware';

View File

@@ -26,16 +26,6 @@ export const LOGIN = 'LOGIN';
*/
export const LOGOUT = 'LOGOUT';
/**
* The type of (redux) action which signals that we have authenticated successful when
* tokenAuthUrl is set.
*
* {
* type: SET_TOKEN_AUTH_URL_SUCCESS
* }
*/
export const SET_TOKEN_AUTH_URL_SUCCESS = 'SET_TOKEN_AUTH_URL_SUCCESS';
/**
* The type of (redux) action which signals that the cyclic operation of waiting
* for conference owner has been aborted.

View File

@@ -8,7 +8,6 @@ import {
ENABLE_MODERATOR_LOGIN,
LOGIN,
LOGOUT,
SET_TOKEN_AUTH_URL_SUCCESS,
STOP_WAIT_FOR_OWNER,
UPGRADE_ROLE_FINISHED,
UPGRADE_ROLE_STARTED,
@@ -242,16 +241,3 @@ export function waitForOwner() {
export function openLoginDialog() {
return openDialog('LoginDialog', LoginDialog);
}
/**
* Updates the config with new options.
*
* @param {boolean} value - The new value.
* @returns {Function}
*/
export function setTokenAuthUrlSuccess(value: boolean) {
return {
type: SET_TOKEN_AUTH_URL_SUCCESS,
value
};
}

View File

@@ -88,3 +88,13 @@ export function openTokenAuthUrl(tokenAuthServiceUrl: string) {
Linking.openURL(tokenAuthServiceUrl);
};
}
/**
* Not used.
*
* @param {string} tokenAuthServiceUrl - Authentication service URL.
* @returns {Promise<any>} Resolves.
*/
export function loginWithPopup(tokenAuthServiceUrl: string): Promise<any> {
return Promise.resolve(tokenAuthServiceUrl);
}

View File

@@ -1,10 +1,15 @@
import { maybeRedirectToWelcomePage } from '../app/actions.web';
import { IStore } from '../app/types';
import { connect } from '../base/connection/actions';
import { openDialog } from '../base/dialog/actions';
import { setJWT } from '../base/jwt/actions';
import { browser } from '../base/lib-jitsi-meet';
import { showErrorNotification } from '../notifications/actions';
import { CANCEL_LOGIN } from './actionTypes';
import LoginQuestionDialog from './components/web/LoginQuestionDialog';
import { isTokenAuthInline } from './functions.any';
import logger from './logger';
export * from './actions.any';
@@ -46,6 +51,147 @@ export function redirectToDefaultLocation() {
return (dispatch: IStore['dispatch']) => dispatch(maybeRedirectToWelcomePage());
}
/**
* Generates a cryptographic nonce.
*
* @returns {string} The generated nonce.
*/
function generateNonce(): string {
const array = new Uint8Array(32);
crypto.getRandomValues(array);
return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
}
/**
* Performs login with a popup window.
*
* @param {string} tokenAuthServiceUrl - Authentication service URL.
* @returns {Promise<any>} A promise that resolves with the authentication
* result or rejects with an error.
*/
export function loginWithPopup(tokenAuthServiceUrl: string): Promise<any> {
return new Promise<any>((resolve, reject) => {
// Open popup
const width = 500;
const height = 600;
const left = window.screen.width / 2 - width / 2;
const top = window.screen.height / 2 - height / 2;
let nonceParam = '';
try {
const nonce = generateNonce();
sessionStorage.setItem('oauth_nonce', nonce);
nonceParam = `&nonce=${nonce}`;
} catch (e) {
if (e instanceof DOMException && e.name === 'SecurityError') {
logger.warn(
'sessionStorage access denied (cross-origin or restricted context) enable it to improve security',
e);
} else {
logger.error('Unable to save nonce in session storage', e);
}
}
const popup = window.open(
`${tokenAuthServiceUrl}${nonceParam}`,
`Auth-${Date.now()}`,
`width=${width},height=${height},left=${left},top=${top}`
);
if (!popup) {
reject(new Error('Popup blocked'));
return;
}
let closedPollInterval: ReturnType<typeof setInterval> | undefined = undefined;
const cleanup = (handler: (event: MessageEvent) => void) => {
window.removeEventListener('message', handler);
clearInterval(closedPollInterval);
popup.close();
try {
sessionStorage.removeItem('oauth_nonce');
} catch (e) {
// ignore
}
try {
sessionStorage.removeItem('code_verifier');
} catch (e) {
// ignore
}
};
const handler = (event: MessageEvent) => {
// Verify origin
if (event.origin !== window.location.origin) {
return;
}
if (event.data.type === 'oauth-success') {
cleanup(handler);
resolve({
accessToken: event.data.accessToken,
idToken: event.data.idToken,
refreshToken: event.data.refreshToken
});
} else if (event.data.type === 'oauth-error') {
cleanup(handler);
reject(new Error(event.data.error));
}
};
// Listen for messages from the popup
window.addEventListener('message', handler);
// Detect manual popup close before authentication completes
closedPollInterval = setInterval(() => {
if (popup.closed) {
cleanup(handler);
reject(new Error('Login cancelled'));
}
}, 500);
});
}
/**
* Performs silent logout by loading the token authentication logout service URL in an
* invisible iframe.
*
* @param {string} tokenAuthLogoutServiceUrl - Logout service URL.
* @returns {Promise<any>} A promise that resolves when logout is complete.
*/
export function silentLogout(tokenAuthLogoutServiceUrl: string): any {
return new Promise<void>(resolve => {
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = tokenAuthLogoutServiceUrl;
document.body.appendChild(iframe);
// Listen for logout completion
const handler = (event: any) => {
if (event.origin !== window.location.origin) return;
if (event.data.type === 'logout-success') {
window.removeEventListener('message', handler);
document.body.removeChild(iframe);
resolve();
}
};
window.addEventListener('message', handler);
});
}
/**
* Opens token auth URL page.
*
@@ -63,6 +209,46 @@ export function openTokenAuthUrl(tokenAuthServiceUrl: string): any {
}
};
if (!browser.isElectron() && isTokenAuthInline(getState()['features/base/config'])) {
loginWithPopup(tokenAuthServiceUrl)
.then((result: { accessToken: string; idToken: string; refreshToken?: string; }) => {
// @ts-ignore
const token: string = result.accessToken;
const idToken: string = result.idToken;
const refreshToken: string | undefined = result.refreshToken;
// @ts-ignore
dispatch(setJWT(token, idToken, refreshToken));
logger.info('Reconnecting to conference with new token.');
const { connection } = getState()['features/base/connection'];
if (connection) {
connection.refreshToken(token).then(
() => {
const { membersOnly } = getState()['features/base/conference'];
membersOnly?.join();
})
.catch((err: any) => {
dispatch(setJWT());
logger.error(err);
});
} else {
dispatch(connect());
}
})
.catch(err => {
dispatch(showErrorNotification({
titleKey: 'dialog.loginFailed'
}));
logger.error(err);
});
return;
}
// Show warning for leaving conference only when in a conference.
if (!browser.isElectron() && getState()['features/base/conference'].conference) {
dispatch(openDialog('LoginQuestionDialog', LoginQuestionDialog, {

View File

@@ -1,15 +1,30 @@
import { IReduxState } from '../app/types';
import { IConfig } from '../base/config/configType';
import { parseURLParams } from '../base/util/parseURLParams';
import { getBackendSafeRoomName } from '../base/util/uri';
import { isVpaasMeeting } from '../jaas/functions';
/**
* Checks if the token for authentication is available.
* Checks if the token for authentication URL is available and the meeting is not jaas.
*
* @param {IReduxState} state - The state of the app.
* @returns {boolean}
*/
export const isTokenAuthEnabled = (state: IReduxState): boolean => {
const config = state['features/base/config'];
return typeof config.tokenAuthUrl === 'string' && config.tokenAuthUrl.length > 0
&& !isVpaasMeeting(state);
};
/**
* Checks if the token authentication should be done inline.
*
* @param {Object} config - Configuration state object from store.
* @returns {boolean}
*/
export const isTokenAuthEnabled = (config: IConfig): boolean =>
typeof config.tokenAuthUrl === 'string' && config.tokenAuthUrl.length > 0;
export const isTokenAuthInline = (config: IConfig): boolean =>
config.tokenAuthInline === true;
/**
* Returns the state that we can add as a parameter to the tokenAuthUrl.
@@ -23,6 +38,7 @@ export const isTokenAuthEnabled = (config: IConfig): boolean =>
* }.
* @param {string?} roomName - The room name.
* @param {string?} tenant - The tenant name if any.
* @param {string?} refreshToken - The refresh token if available.
*
* @returns {Object} The state object.
*/
@@ -35,8 +51,10 @@ export const _getTokenAuthState = (
videoMuted: boolean | undefined;
},
roomName: string | undefined,
tenant: string | undefined): object => {
tenant: string | undefined,
refreshToken?: string): object => {
const state = {
refreshToken,
room: roomName,
roomSafe: getBackendSafeRoomName(roomName),
tenant

View File

@@ -23,6 +23,7 @@ export * from './functions.any';
* }.
* @param {string?} roomName - The room name.
* @param {string?} tenant - The tenant name if any.
* @param {string?} refreshToken - The refreshToken if any.
*
* @returns {Promise<string|undefined>} - The URL pointing to JWT login service or
* <tt>undefined</tt> if the pattern stored in config is not a string and the URL can not be
@@ -39,7 +40,9 @@ export const getTokenAuthUrl = (
},
roomName: string | undefined,
// eslint-disable-next-line max-params
tenant: string | undefined): Promise<string | undefined> => {
tenant: string | undefined,
// eslint-disable-next-line max-params
refreshToken?: string | undefined): Promise<string | undefined> => {
const {
audioMuted = false,
@@ -64,7 +67,8 @@ export const getTokenAuthUrl = (
videoMuted
},
roomName,
tenant
tenant,
refreshToken
);
// Append ios=true or android=true to the token URL.

View File

@@ -4,6 +4,7 @@ import { IConfig } from '../base/config/configType';
import { browser } from '../base/lib-jitsi-meet';
import { _getTokenAuthState } from './functions.any';
import logger from './logger';
export * from './functions.any';
@@ -41,6 +42,7 @@ function _cryptoRandom() {
* }.
* @param {string?} roomName - The room name.
* @param {string?} tenant - The tenant name if any.
* @param {string?} refreshToken - The refresh token if available.
*
* @returns {Promise<string|undefined>} - The URL pointing to JWT login service or
* <tt>undefined</tt> if the pattern stored in config is not a string and the URL can not be
@@ -56,9 +58,10 @@ export const getTokenAuthUrl = (
videoMuted: boolean | undefined;
},
roomName: string | undefined,
// eslint-disable-next-line max-params
tenant: string | undefined): Promise<string | undefined> => {
// eslint-disable max-params
tenant: string | undefined,
refreshToken?: string): Promise<string | undefined> => {
// eslint-enable max-params
const {
audioMuted = false,
audioOnlyEnabled = false,
@@ -82,7 +85,8 @@ export const getTokenAuthUrl = (
videoMuted
},
roomName,
tenant
tenant,
refreshToken
);
if (browser.isElectron()) {
@@ -103,7 +107,17 @@ export const getTokenAuthUrl = (
codeVerifier += POSSIBLE_CHARS.charAt(Math.floor(_cryptoRandom() * POSSIBLE_CHARS.length));
}
window.sessionStorage.setItem('code_verifier', codeVerifier);
try {
window.sessionStorage.setItem('code_verifier', codeVerifier);
} catch (e) {
if (e instanceof DOMException && e.name === 'SecurityError') {
logger.warn(
'sessionStorage access denied (cross-origin or restricted context) enable it to improve security',
e);
} else {
logger.error('Unable to save code verifier in session storage', e);
}
}
return window.crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier))
.then(digest => {

View File

@@ -1,11 +1,9 @@
import { IStore } from '../app/types';
import { APP_WILL_NAVIGATE } from '../base/app/actionTypes';
import {
CONFERENCE_FAILED,
CONFERENCE_JOINED,
CONFERENCE_LEFT
} from '../base/conference/actionTypes';
import { isRoomValid } from '../base/conference/functions';
import { CONNECTION_ESTABLISHED, CONNECTION_FAILED } from '../base/connection/actionTypes';
import { hideDialog } from '../base/dialog/actions';
import { isDialogOpen } from '../base/dialog/functions';
@@ -35,7 +33,6 @@ import {
openTokenAuthUrl,
openWaitForOwnerDialog,
redirectToDefaultLocation,
setTokenAuthUrlSuccess,
stopWaitForOwner,
waitForOwner
} from './actions';
@@ -126,25 +123,15 @@ MiddlewareRegistry.register(store => next => action => {
}
case CONFERENCE_JOINED: {
const { dispatch, getState } = store;
const state = getState();
const config = state['features/base/config'];
if (isTokenAuthEnabled(config)
&& config.tokenAuthUrlAutoRedirect
&& state['features/base/jwt'].jwt) {
// auto redirect is turned on and we have successfully logged in
// let's mark that
dispatch(setTokenAuthUrlSuccess(true));
}
const { dispatch } = store;
if (_isWaitingForModerator(store)) {
store.dispatch(disableModeratorLogin());
dispatch(disableModeratorLogin());
}
if (_isWaitingForOwner(store)) {
store.dispatch(stopWaitForOwner());
dispatch(stopWaitForOwner());
}
store.dispatch(hideLoginDialog());
dispatch(hideLoginDialog());
break;
}
@@ -187,26 +174,6 @@ MiddlewareRegistry.register(store => next => action => {
break;
}
case APP_WILL_NAVIGATE: {
const { dispatch, getState } = store;
const state = getState();
const config = state['features/base/config'];
const room = state['features/base/conference'].room;
if (isRoomValid(room)
&& config.tokenAuthUrl && config.tokenAuthUrlAutoRedirect
&& state['features/authentication'].tokenAuthUrlSuccessful
&& !state['features/base/jwt'].jwt) {
// if we have auto redirect enabled, and we have previously logged in successfully
// we will redirect to the auth url to get the token and login again
// we want to mark token auth success to false as if login is unsuccessful
// the participant can join anonymously and not go in login loop
dispatch(setTokenAuthUrlSuccess(false));
}
break;
}
case STOP_WAIT_FOR_OWNER:
_clearExistingWaitForOwnerTimeout(store);
store.dispatch(hideDialog('WaitForOwnerDialog', WaitForOwnerDialog));
@@ -288,6 +255,7 @@ function _handleLogin({ dispatch, getState }: IStore) {
const { enabled: audioOnlyEnabled } = state['features/base/audio-only'];
const audioMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.AUDIO);
const videoMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.VIDEO);
const refreshToken = state['features/base/jwt'].refreshToken;
if (!room) {
logger.warn('Cannot handle login, room is undefined!');
@@ -295,7 +263,7 @@ function _handleLogin({ dispatch, getState }: IStore) {
return;
}
if (!isTokenAuthEnabled(config)) {
if (!isTokenAuthEnabled(state)) {
dispatch(openLoginDialog());
return;
@@ -311,7 +279,8 @@ function _handleLogin({ dispatch, getState }: IStore) {
videoMuted
},
room,
tenant
tenant,
refreshToken
)
.then((tokenAuthServiceUrl: string | undefined) => {
if (!tokenAuthServiceUrl) {

View File

@@ -1,4 +1,3 @@
import PersistenceRegistry from '../base/redux/PersistenceRegistry';
import ReducerRegistry from '../base/redux/ReducerRegistry';
import { assign } from '../base/redux/functions';
@@ -6,7 +5,6 @@ import {
CANCEL_LOGIN,
DISABLE_MODERATOR_LOGIN,
ENABLE_MODERATOR_LOGIN,
SET_TOKEN_AUTH_URL_SUCCESS,
STOP_WAIT_FOR_OWNER,
UPGRADE_ROLE_FINISHED,
UPGRADE_ROLE_STARTED,
@@ -20,17 +18,9 @@ export interface IAuthenticationState {
thenableWithCancel?: {
cancel: Function;
};
tokenAuthUrlSuccessful?: boolean;
waitForOwnerTimeoutID?: number;
}
/**
* Sets up the persistence of the feature {@code authentication}.
*/
PersistenceRegistry.register('features/authentication', {
tokenAuthUrlSuccessful: true
});
/**
* Listens for actions which change the state of the authentication feature.
*
@@ -53,11 +43,6 @@ ReducerRegistry.register<IAuthenticationState>('features/authentication',
showModeratorLogin: true
});
case SET_TOKEN_AUTH_URL_SUCCESS:
return assign(state, {
tokenAuthUrlSuccessful: action.value
});
case STOP_WAIT_FOR_OWNER:
return assign(state, {
error: undefined,

View File

@@ -1,4 +1,6 @@
import { maybeRedirectToTokenAuthUrl } from '../../app/actions.any';
import { IReduxState, IStore } from '../../app/types';
import { isTokenAuthInline } from '../../authentication/functions.any';
import { readyToClose } from '../../mobile/external-api/actions';
import { transcriberJoined, transcriberLeft } from '../../transcribing/actions';
import { setIAmVisitor } from '../../visitors/actions';
@@ -354,7 +356,7 @@ export function e2eRttChanged(participant: Object, rtt: number) {
* authLogin: string
* }}
*/
export function authStatusChanged(authEnabled: boolean, authLogin: string) {
export function authStatusChanged(authEnabled: boolean, authLogin?: string) {
return {
type: AUTH_STATUS_CHANGED,
authEnabled,
@@ -1079,6 +1081,15 @@ export function redirect(vnode: string, focusJid: string, username: string) {
dispatch(conferenceWillInit());
logger.info(`Dispatching connect from redirect (visitor = ${Boolean(vnode)}).`);
// obtaining the new token just before joining the main room from a visitor one will work
// only when using inline auth and will not work when using redirection
if (isTokenAuthInline(getState()['features/base/config'])
&& maybeRedirectToTokenAuthUrl(dispatch, getState, (e: Error) => {
logger.error('Token is expired and there was an error refreshing it.', e);
})) {
return;
}
return dispatch(connect());
})
.then(() => {

View File

@@ -14,6 +14,7 @@ import { sendAnalytics } from '../../analytics/functions';
import { reloadNow } from '../../app/actions';
import { IStore } from '../../app/types';
import { login } from '../../authentication/actions.any';
import { isTokenAuthEnabled } from '../../authentication/functions.any';
import { removeLobbyChatParticipant } from '../../chat/actions.any';
import { openDisplayNamePrompt } from '../../display-name/actions';
import { isVpaasMeeting } from '../../jaas/functions';
@@ -266,8 +267,11 @@ function _conferenceFailed({ dispatch, getState }: IStore, next: Function, actio
descriptionKey = 'dialog.errorRoomCreationRestriction';
} else if (type === JitsiConferenceErrors.AUTH_ERROR_TYPES.ROOM_UNAUTHENTICATED_ACCESS_DISABLED) {
titleKey = 'dialog.unauthenticatedAccessDisabled';
customActionNameKey = [ 'toolbar.login' ];
customActionHandler = [ () => dispatch(login()) ];
if (isTokenAuthEnabled(getState())) {
customActionNameKey = [ 'toolbar.login' ];
customActionHandler = [ () => dispatch(login()) ]; // show login button if not jaas
}
}
dispatch(showErrorNotification({
@@ -402,7 +406,8 @@ async function _connectionEstablished({ dispatch, getState }: IStore, next: Func
email = getLocalParticipant(getState())?.email;
}
dispatch(authStatusChanged(true, email || ''));
// it may happen to be already set
dispatch(authStatusChanged(true, email || getState()['features/base/conference'].authLogin || ''));
}
// FIXME: Workaround for the web version. Currently, the creation of the

View File

@@ -539,11 +539,6 @@ export interface IConfig {
disableRemoveRaisedHandOnFocus?: boolean;
};
readOnlyName?: boolean;
recordingLimit?: {
appName?: string;
appURL?: string;
limit?: number;
};
recordingService?: {
enabled?: boolean;
hideStorageWarning?: boolean;
@@ -616,8 +611,8 @@ export interface IConfig {
disabled?: boolean;
numberOfVisibleTiles?: number;
};
tokenAuthInline?: boolean;
tokenAuthUrl?: string;
tokenAuthUrlAutoRedirect?: string;
tokenGetUserInfoOutOfContext?: boolean;
tokenLogoutUrl?: string;
tokenRespectTenant?: boolean;
@@ -637,6 +632,7 @@ export interface IConfig {
transcription?: {
autoCaptionOnTranscribe?: boolean;
autoTranscribeOnRecord?: boolean;
customLanguages?: object;
disableClosedCaptions?: boolean;
enabled?: boolean;
preferredLanguage?: string;

View File

@@ -51,6 +51,16 @@ export const CONNECTION_PROPERTIES_UPDATED = 'CONNECTION_PROPERTIES_UPDATED';
*/
export const CONNECTION_WILL_CONNECT = 'CONNECTION_WILL_CONNECT';
/**
* The type of (redux) action which signals that the token for a connection is expired.
*
* {
* type: CONNECTION_TOKEN_EXPIRED,
* connection: JitsiConnection
* }
*/
export const CONNECTION_TOKEN_EXPIRED = 'CONNECTION_TOKEN_EXPIRED';
/**
* The type of (redux) action which sets the location URL of the application,
* connection, conference, etc.

View File

@@ -17,6 +17,7 @@ import {
CONNECTION_ESTABLISHED,
CONNECTION_FAILED,
CONNECTION_PROPERTIES_UPDATED,
CONNECTION_TOKEN_EXPIRED,
CONNECTION_WILL_CONNECT,
SET_LOCATION_URL,
SET_PREFER_VISITOR
@@ -239,6 +240,9 @@ export function _connectInternal(id?: string, password?: string) {
connection.addEventListener(
JitsiConnectionEvents.PROPERTIES_UPDATED,
_onPropertiesUpdate);
connection.addEventListener(
JitsiConnectionEvents.CONNECTION_TOKEN_EXPIRED,
_onTokenExpired);
/**
* Unsubscribe the connection instance from
@@ -323,6 +327,16 @@ export function _connectInternal(id?: string, password?: string) {
dispatch(redirect(vnode, focusJid, username));
}
/**
* Connection will resume.
*
* @private
* @returns {void}
*/
function _onTokenExpired(): void {
dispatch(_connectionTokenExpired(connection));
}
/**
* Connection properties were updated.
*
@@ -364,6 +378,23 @@ function _connectionWillConnect(connection: Object) {
};
}
/**
* Create an action for when a connection token is expired.
*
* @param {JitsiConnection} connection - The {@code JitsiConnection} token is expired.
* @private
* @returns {{
* type: CONNECTION_TOKEN_EXPIRED,
* connection: JitsiConnection
* }}
*/
function _connectionTokenExpired(connection: Object) {
return {
type: CONNECTION_TOKEN_EXPIRED,
connection
};
}
/**
* Create an action for when connection properties are updated.
*

View File

@@ -4,7 +4,7 @@ import { getCustomerDetails } from '../../jaas/actions.any';
import { getJaasJWT, isVpaasMeeting } from '../../jaas/functions';
import { navigateRoot } from '../../mobile/navigation/rootNavigationContainerRef';
import { screen } from '../../mobile/navigation/routes';
import { conferenceWillLeave } from '../conference/actions.native';
import { conferenceLeft } from '../conference/actions.native';
import { setJWT } from '../jwt/actions';
import { JitsiConnectionErrors } from '../lib-jitsi-meet';
@@ -60,7 +60,7 @@ export function connect(id?: string, password?: string) {
*/
export function hangup(_requestFeedback = false) {
return (dispatch: IStore['dispatch']) => {
dispatch(conferenceWillLeave());
dispatch(appNavigate(undefined));
dispatch(conferenceLeft());
};
}

View File

@@ -23,6 +23,7 @@ export interface IConnectionState {
getJid: () => string;
getLogs: () => Object;
initJitsiConference: Function;
refreshToken: Function;
removeFeature: Function;
};
error?: ConnectionFailedError;

View File

@@ -29,4 +29,3 @@ export function isIpadMobileBrowser() {
// @ts-ignore
return isIosMobileBrowser() && Platform.isPad;
}

View File

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

View File

@@ -0,0 +1,37 @@
import { MIN_FILMSTRIP_RESIZE_WIDTH } from '../../filmstrip/constants';
/**
* Detects if the current device has touch capability.
* This includes smartphones, tablets, and laptops with touch screens.
*
* @returns {boolean} True if the device supports touch events.
*/
export function isTouchDevice(): boolean {
// Check maxTouchPoints (most reliable for modern browsers)
if ('maxTouchPoints' in navigator) {
return navigator.maxTouchPoints > 0;
}
return false;
}
/**
* Determines if resize functionality should be enabled based on device capabilities
* and screen size. On touch devices, resize is only enabled for larger screens.
* On non-touch devices (desktop), resize is always enabled.
*
* @returns {boolean} True if resize functionality should be available to the user.
*/
export function shouldEnableResize(): boolean {
const hasTouch = isTouchDevice();
// On non-touch devices (desktop), always enable resize
if (!hasTouch) {
return true;
}
// On touch devices, only enable if screen is large enough.
return window?.innerWidth >= MIN_FILMSTRIP_RESIZE_WIDTH;
}
export * from './utils.any';

View File

@@ -29,18 +29,3 @@ export function translate<P extends WithTranslation>(component: React.ComponentT
// Use the default list of namespaces.
return withTranslation([ 'main', 'languages', 'countries' ])(component);
}
/**
* Translates a specific key to text containing HTML via a specific translate
* function.
*
* @param {Function} t - The translate function.
* @param {string} key - The key to translate.
* @param {Array<*>} options - The options, if any, to pass to {@link t}.
* @returns {ReactElement} A ReactElement which depicts the translated HTML
* text.
*/
export function translateToHTML(t: Function, key: string, options: Object = {}) {
// eslint-disable-next-line react/no-danger
return <span dangerouslySetInnerHTML = {{ __html: t(key, options) }} />;
}

View File

@@ -0,0 +1,19 @@
import React from 'react';
import { Text } from 'react-native';
export { changeLanguageBundle, translate } from './functions.any';
/**
* Translates a specific key to text containing HTML via a specific translate
* function. On native, HTML tags are stripped and the plain text is rendered.
*
* @param {Function} t - The translate function.
* @param {string} key - The key to translate.
* @param {Record<string, unknown>} options - The options, if any, to pass to {@link t}.
* @returns {ReactElement} A ReactElement which depicts the translated text.
*/
export function translateToHTML(t: Function, key: string, options: Record<string, unknown> = {}) {
const text = t(key, options).replace(/<[^>]*>/g, '');
return <Text>{ text }</Text>;
}

View File

@@ -0,0 +1,47 @@
import DOMPurify from 'dompurify';
import React from 'react';
export { changeLanguageBundle, translate } from './functions.any';
const SANITIZE_CONFIG = {
ALLOWED_TAGS: [ 'a', 'b', 'br', 'span' ],
ALLOWED_ATTR: [ 'href', 'target', 'rel' ],
ALLOWED_URI_REGEXP: /^https?:\/\//i
};
/**
* Escapes a string for safe inclusion in HTML.
*
* @param {string} value - The string to escape.
* @returns {string} The escaped string.
*/
function escapeHTML(value: string): string {
const el = document.createElement('span');
el.textContent = value;
return el.innerHTML;
}
/**
* Translates a specific key to text containing HTML via a specific translate
* function.
*
* @param {Function} t - The translate function.
* @param {string} key - The key to translate.
* @param {Record<string, unknown>} options - The options, if any, to pass to {@link t}.
* @returns {ReactElement} A ReactElement which depicts the translated HTML
* text.
*/
export function translateToHTML(t: Function, key: string, options: Record<string, unknown> = {}) {
const escapedOptions: Record<string, unknown> = {};
for (const [ k, v ] of Object.entries(options)) {
escapedOptions[k] = typeof v === 'string' ? escapeHTML(v) : v;
}
const html = DOMPurify.sanitize(t(key, escapedOptions), SANITIZE_CONFIG);
// eslint-disable-next-line react/no-danger
return <span dangerouslySetInnerHTML = {{ __html: html }} />;
}

View File

@@ -20,15 +20,21 @@ export function setDelayedLoadOfAvatarUrl(avatarUrl?: string) {
* Stores a specific JSON Web Token (JWT) into the redux store.
*
* @param {string} [jwt] - The JSON Web Token (JWT) to store.
* @param {string} idToken - The ID Token to store.
* @param {string} refreshToken - The Refresh Token to store.
* @returns {{
* type: SET_JWT,
* jwt: (string|undefined)
* jwt: (string|undefined),
* idToken: (string|undefined),
* refreshToken: (string|undefined)
* }}
*/
export function setJWT(jwt?: string) {
export function setJWT(jwt?: string, idToken?: string, refreshToken?: string) {
return {
type: SET_JWT,
jwt
jwt,
idToken,
refreshToken
};
}

View File

@@ -4,6 +4,7 @@ import { AnyAction } from 'redux';
import { IStore } from '../../app/types';
import { isVpaasMeeting } from '../../jaas/functions';
import { authStatusChanged } from '../conference/actions.any';
import { getCurrentConference } from '../conference/functions';
import { SET_CONFIG } from '../config/actionTypes';
import { CONNECTION_ESTABLISHED, SET_LOCATION_URL } from '../connection/actionTypes';
@@ -39,6 +40,8 @@ StateListenerRegistry.register(
* @returns {Function}
*/
MiddlewareRegistry.register(store => next => action => {
const state = store.getState();
switch (action.type) {
case SET_CONFIG:
case SET_LOCATION_URL:
@@ -46,7 +49,6 @@ MiddlewareRegistry.register(store => next => action => {
// have decided to store in the feature jwt
return _setConfigOrLocationURL(store, next, action);
case CONNECTION_ESTABLISHED: {
const state = store.getState();
const delayedLoadOfAvatarUrl = state['features/base/jwt'].delayedLoadOfAvatarUrl;
if (delayedLoadOfAvatarUrl) {
@@ -56,6 +58,7 @@ MiddlewareRegistry.register(store => next => action => {
store.dispatch(setDelayedLoadOfAvatarUrl());
store.dispatch(setKnownAvatarUrl(delayedLoadOfAvatarUrl));
}
break;
}
case SET_JWT:
return _setJWT(store, next, action);
@@ -149,7 +152,7 @@ function _setConfigOrLocationURL({ dispatch, getState }: IStore, next: Function,
*/
function _setJWT(store: IStore, next: Function, action: AnyAction) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { jwt, type, ...actionPayload } = action;
const { idToken, jwt, refreshToken, type, ...actionPayload } = action;
if (!Object.keys(actionPayload).length) {
const state = store.getState();
@@ -210,24 +213,32 @@ function _setJWT(store: IStore, next: Function, action: AnyAction) {
if (context.user && context.user.role === 'visitor') {
action.preferVisitor = true;
}
} else if (tokenGetUserInfoOutOfContext
&& (jwtPayload.name || jwtPayload.picture || jwtPayload.email)) {
// there are some tokens (firebase) having picture and name on the main level.
_overwriteLocalParticipant(store, {
avatarURL: jwtPayload.picture,
name: jwtPayload.name,
email: jwtPayload.email
});
} else if (jwtPayload.name || jwtPayload.picture || jwtPayload.email) {
if (tokenGetUserInfoOutOfContext) {
// there are some tokens (firebase) having picture and name on the main level.
_overwriteLocalParticipant(store, {
avatarURL: jwtPayload.picture,
name: jwtPayload.name,
email: jwtPayload.email
});
}
store.dispatch(authStatusChanged(true, jwtPayload.email));
}
}
} else if (typeof APP === 'undefined') {
// The logic of restoring JWT overrides make sense only on mobile.
// On Web it should eventually be restored from storage, but there's
// no such use case yet.
} else {
if (typeof APP === 'undefined') {
// The logic of restoring JWT overrides make sense only on mobile.
// On Web it should eventually be restored from storage, but there's
// no such use case yet.
const { user } = state['features/base/jwt'];
const { user } = state['features/base/jwt'];
user && _undoOverwriteLocalParticipant(store, user);
user && _undoOverwriteLocalParticipant(store, user);
}
// clears authLogin
store.dispatch(authStatusChanged(true));
}
}

View File

@@ -0,0 +1,100 @@
import { IStore } from '../../app/types';
import { loginWithPopup } from '../../authentication/actions';
import LoginQuestionDialog from '../../authentication/components/web/LoginQuestionDialog';
import { getTokenAuthUrl, isTokenAuthEnabled, isTokenAuthInline } from '../../authentication/functions';
import { hideNotification, showNotification } from '../../notifications/actions';
import { NOTIFICATION_TIMEOUT_TYPE, NOTIFICATION_TYPE } from '../../notifications/constants';
import { CONNECTION_TOKEN_EXPIRED } from '../connection/actionTypes';
import { openDialog } from '../dialog/actions';
import { browser } from '../lib-jitsi-meet';
import MiddlewareRegistry from '../redux/MiddlewareRegistry';
import { parseURIString } from '../util/uri';
import { setJWT } from './actions';
import logger from './logger';
const PROMPT_LOGIN_NOTIFICATION_ID = 'PROMPT_LOGIN_NOTIFICATION_ID';
/**
* Middleware to handle token expiration on web - prompts the user to re-authenticate.
*
* @param {Store} store - The redux store.
* @private
* @returns {Function}
*/
MiddlewareRegistry.register((store: IStore) => next => action => {
if (action.type === CONNECTION_TOKEN_EXPIRED) {
const state = store.getState();
const jwt = state['features/base/jwt'].jwt;
const refreshToken = state['features/base/jwt'].refreshToken;
if (typeof APP !== 'undefined' && jwt && isTokenAuthEnabled(state)) {
const { connection, locationURL = { href: '' } as URL } = state['features/base/connection'];
const { tenant } = parseURIString(locationURL.href) || {};
const room = state['features/base/conference'].room;
const dispatch = store.dispatch;
getTokenAuthUrl(
state['features/base/config'],
locationURL,
{
audioMuted: false,
audioOnlyEnabled: false,
skipPrejoin: true,
videoMuted: false
},
room,
tenant,
refreshToken
)
.then((url: string | undefined) => {
if (url) {
dispatch(showNotification({
descriptionKey: 'dialog.loginOnResume',
titleKey: 'dialog.login',
uid: PROMPT_LOGIN_NOTIFICATION_ID,
customActionNameKey: [ 'dialog.login' ],
customActionHandler: [ () => {
store.dispatch(hideNotification(PROMPT_LOGIN_NOTIFICATION_ID));
if (isTokenAuthInline(state['features/base/config'])) {
loginWithPopup(url)
.then((result: { accessToken: string; idToken: string; refreshToken?: string; }) => {
const token: string = result.accessToken;
const idToken: string = result.idToken;
const newRefreshToken: string | undefined = result.refreshToken;
dispatch(setJWT(token, idToken, newRefreshToken || refreshToken));
connection?.refreshToken(token)
.catch((err: any) => {
dispatch(setJWT());
logger.error(err);
});
}).catch(logger.error);
} else {
dispatch(openDialog('LoginQuestionDialog', LoginQuestionDialog, {
handler: () => {
// Give time for the dialog to close.
setTimeout(() => {
if (browser.isElectron()) {
window.open(url, '_blank');
} else {
window.location.href = url;
}
}, 500);
}
}));
}
} ],
appearance: NOTIFICATION_TYPE.ERROR
}, NOTIFICATION_TIMEOUT_TYPE.STICKY));
}
})
.catch(logger.error);
}
}
return next(action);
});

View File

@@ -11,8 +11,10 @@ export interface IJwtState {
};
delayedLoadOfAvatarUrl?: string;
group?: string;
idToken?: string;
jwt?: string;
knownAvatarUrl?: string;
refreshToken?: string;
server?: string;
tenant?: string;
user?: {

View File

@@ -1,10 +1,11 @@
import React from 'react';
import { connect } from 'react-redux';
import { IReduxState } from '../../../app/types';
import AudioTrack from '../../../base/media/components/web/AudioTrack';
import { MEDIA_TYPE } from '../../../base/media/constants';
import { ITrack } from '../../../base/tracks/types';
import { IReduxState } from '../../../../app/types';
import { ITrack } from '../../../tracks/types';
import { MEDIA_TYPE } from '../../constants';
import AudioTrack from './AudioTrack';
/**
* The type of the React {@code Component} props of {@link AudioTracksContainer}.

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